Parse nested listvalue in json for ruby (#5867)

* Add conformance test for nested listvalue

* Fix upb for parsing repeated Value/ListValue

* Add failed repeated ListValue conformance test into php failure list
diff --git a/php/ext/google/protobuf/upb.c b/php/ext/google/protobuf/upb.c
index 8452334..4872835 100644
--- a/php/ext/google/protobuf/upb.c
+++ b/php/ext/google/protobuf/upb.c
@@ -12768,6 +12768,11 @@
   /* The table mapping json name to fielddef for this message. */
   upb_strtable *name_table;
 
+  /* We are in a repeated-field context. We need this flag to decide whether to
+   * handle the array as a normal repeated field or a
+   * google.protobuf.ListValue/google.protobuf.Value. */
+  bool is_repeated;
+
   /* We are in a repeated-field context, ready to emit mapentries as
    * submessages. This flag alters the start-of-object (open-brace) behavior to
    * begin a sequence of mapentry messages rather than a single submessage. */
@@ -13808,6 +13813,7 @@
     inner->m = p->top->m;
     inner->f = p->top->f;
     inner->name_table = NULL;
+    inner->is_repeated = false;
     inner->is_map = false;
     inner->is_mapentry = false;
     inner->is_any = false;
@@ -14284,6 +14290,7 @@
   inner->m = p->top->m;
   inner->f = p->top->f;
   inner->name_table = NULL;
+  inner->is_repeated = false;
   inner->is_map = false;
   inner->is_mapentry = false;
   inner->is_any = false;
@@ -14431,6 +14438,7 @@
   inner->m = mapentrymsg;
   inner->name_table = NULL;
   inner->mapfield = mapfield;
+  inner->is_repeated = false;
   inner->is_map = false;
   inner->is_any = false;
   inner->any_frame = NULL;
@@ -14555,6 +14563,7 @@
     inner = p->top + 1;
     inner->m = NULL;
     inner->f = NULL;
+    inner->is_repeated = false;
     inner->is_map = false;
     inner->is_mapentry = false;
     inner->is_any = false;
@@ -14579,6 +14588,7 @@
     inner->name_table = NULL;
     inner->mapfield = p->top->f;
     inner->f = NULL;
+    inner->is_repeated = false;
     inner->is_map = true;
     inner->is_mapentry = false;
     inner->is_any = false;
@@ -14602,6 +14612,7 @@
     inner->m = upb_fielddef_msgsubdef(p->top->f);
     set_name_table(p, inner);
     inner->f = NULL;
+    inner->is_repeated = false;
     inner->is_map = false;
     inner->is_mapentry = false;
     inner->is_unknown_field = false;
@@ -14704,10 +14715,14 @@
     } else {
       return false;
     }
-  } else if (is_wellknown_field(p, UPB_WELLKNOWN_LISTVALUE)) {
+  } else if (is_wellknown_field(p, UPB_WELLKNOWN_LISTVALUE) &&
+             (!upb_fielddef_isseq(p->top->f) ||
+              p->top->is_repeated)) {
     if (!start_subobject(p)) return false;
     start_listvalue_object(p);
-  } else if (is_wellknown_field(p, UPB_WELLKNOWN_VALUE)) {
+  } else if (is_wellknown_field(p, UPB_WELLKNOWN_VALUE) &&
+             (!upb_fielddef_isseq(p->top->f) ||
+              p->top->is_repeated)) {
     if (!start_subobject(p)) return false;
     start_value_object(p, VALUE_LISTVALUE);
     if (!start_subobject(p)) return false;
@@ -14719,6 +14734,7 @@
     inner->m = NULL;
     inner->name_table = NULL;
     inner->f = NULL;
+    inner->is_repeated = false;
     inner->is_map = false;
     inner->is_mapentry = false;
     inner->is_any = false;
@@ -14745,6 +14761,7 @@
   inner->m = p->top->m;
   inner->name_table = NULL;
   inner->f = p->top->f;
+  inner->is_repeated = true;
   inner->is_map = false;
   inner->is_mapentry = false;
   inner->is_any = false;
@@ -15778,6 +15795,7 @@
 
   p->top = p->stack;
   p->top->f = NULL;
+  p->top->is_repeated = false;
   p->top->is_map = false;
   p->top->is_mapentry = false;
   p->top->is_any = false;