use RMAX= in test-random/bundles to test larger randomized values (default max limit is 128 bytes)
diff --git a/tests/tests-randomized/bundles/04-VisibleString-bundle.txt b/tests/tests-randomized/bundles/04-VisibleString-bundle.txt
index f86d743..ec03664 100644
--- a/tests/tests-randomized/bundles/04-VisibleString-bundle.txt
+++ b/tests/tests-randomized/bundles/04-VisibleString-bundle.txt
@@ -16,11 +16,11 @@
 T ::= VisibleString (SIZE(1..128))
 T ::= VisibleString (SIZE(1..129))
 T ::= VisibleString (SIZE(5) INTERSECTION FROM("A".."Z"))
-T ::= VisibleString (SIZE(64000))   -- Length is not encoded, #11.9.3.3
-T ::= VisibleString (SIZE(32000..32002))
-T ::= VisibleString (SIZE(32000..32002)) (FROM("A".."B"))
-T ::= VisibleString (SIZE(32000..32002,...)) (FROM("A".."B"))
-T ::= VisibleString (SIZE(65530..65535))
-T ::= VisibleString (SIZE(65530..65536))
+RMAX=64000 VisibleString (SIZE(64000))   -- Length is not encoded, #11.9.3.3
+RMAX=33000 T ::= VisibleString (SIZE(32000..32002))
+RMAX=33000 T ::= VisibleString (SIZE(32000..32002)) (FROM("A".."B"))
+RMAX=33000 T ::= VisibleString (SIZE(32000..32002,...)) (FROM("A".."B"))
+RMAX=65536 T ::= VisibleString (SIZE(65530..65535))
+RMAX=65536 T ::= VisibleString (SIZE(65530..65536))
 T ::= VisibleString (SIZE(4..6) INTERSECTION (FROM("A".."B")))
 T ::= VisibleString (SIZE(4..6,...) INTERSECTION (FROM("A".."B")))
diff --git a/tests/tests-randomized/bundles/README b/tests/tests-randomized/bundles/README
new file mode 100644
index 0000000..29c1aab
--- /dev/null
+++ b/tests/tests-randomized/bundles/README
@@ -0,0 +1,22 @@
+
+This directory contains test bundles for randomized testing.
+Each file contains a number of related ASN.1 types with variations in
+contstraints that are intended to affect encoding and parsing.
+
+ * Lines consisting of comments only are ignored.
+
+ * The ASN.1 type can be written with "T ::=" prefix or without it, in which
+   case it will be added automatically. It is done to simplify manual
+   testing with ./check-bundles.sh -t <type>. For example,
+        ./check-bundles.sh -t INTEGER
+   is equivalent to
+        ./check-bundles.sh -t "T ::= INTEGER"
+
+ * By default, the random value generator attempts to generate values
+   limited to very roughly to around 128 bytes. If huge values are desired
+   (perhaps due to large constraints), the RMAX=<size> prefix can be specified
+   on a line:
+
+        RMAX=64000 T ::= VisibleString (SIZE(64000))
+   
+
diff --git a/tests/tests-randomized/check-bundles.sh b/tests/tests-randomized/check-bundles.sh
index 2847eb0..12f6e89 100755
--- a/tests/tests-randomized/check-bundles.sh
+++ b/tests/tests-randomized/check-bundles.sh
@@ -66,7 +66,7 @@
     echo "Testing [$asn] ${where}"
 
     mkdir -p ${RNDTEMP}
-    if (set -e && cd ${RNDTEMP} && compile_and_test "$asn" "$@"); then
+    if (set -e && cd ${RNDTEMP} && compile_and_test "$asn" "${where}"); then
         echo "OK [$asn] ${where}"
         tests_succeeded=$((tests_succeeded+1))
     else
@@ -79,7 +79,7 @@
     local asn="$1"
     shift
 
-    if ! asn_compile "$asn" "$@"; then
+    if ! asn_compile "$asn" "$*"; then
         echo "Cannot compile ASN.1 $asn"
         return 1
     fi
@@ -91,17 +91,21 @@
         return 2
     fi
 
+    # Maximum size of the random data
+    local rmax=$(echo "$asn" | sed -Ee '/RMAX/!d;s/.*RMAX=([0-9]+).*/\1/')
+    if [ "0${rmax}" -lt 1 ]; then rmax=128; fi
+
     echo "Checking random data encode-decode"
-    if ! eval ${ASAN_ENV_FLAGS} ./random-test-driver -c; then
+    if ! eval ${ASAN_ENV_FLAGS} ./random-test-driver -s ${rmax} -c; then
         echo "RETRY:"
-        echo "(cd ${RNDTEMP} && CC=${CC} CFLAGS=\"${LIBFUZZER_CFLAGS} ${CFLAGS}\" make && ${ASAN_ENV_FLAGS} ./random-test-driver -c)"
+        echo "(cd ${RNDTEMP} && CC=${CC} CFLAGS=\"${LIBFUZZER_CFLAGS} ${CFLAGS}\" make && ${ASAN_ENV_FLAGS} ./random-test-driver -s ${rmax} -c)"
         return 3
     fi
 
     echo "Generating new random data"
     rm -rf random-data
     cmd="${ASAN_ENV_FLAGS} UBSAN_OPTIONS=print_stacktrace=1"
-    cmd+=" ./random-test-driver -g random-data"
+    cmd+=" ./random-test-driver -s ${rmax} -g random-data"
     if ! eval "$cmd" ; then
         echo "RETRY:"
         echo "(cd ${RNDTEMP} && $cmd)"
@@ -144,14 +148,16 @@
     local asn="$1"
     shift
 
-    # Create "INTEGER (1..2)" from "T ::= INTEGER (1..2) -- Comment"
-    local short_asn=$(echo "$asn" | sed -e 's/ *--.*//')
+    # Create "INTEGER (1..2)" from "RMAX=5 T ::= INTEGER (1..2) -- Comment"
+    local short_asn=$(echo "$asn" | sed -e 's/ *--.*//;s/RMAX=[^ ]* //;')
     if [ $(echo "$short_asn" | grep -c "::=") = 1 ]; then
         short_asn=$(echo "$short_asn" | sed -e 's/.*::= *//')
     fi
+    asn=$(echo "$asn" | sed -e 's/RMAX=[^ ]* //;')
 
     test ! -f Makefile.am   # Protection from accidental clobbering
     echo "Test DEFINITIONS ::= BEGIN $asn" > test.asn1
+    echo "-- $*" >> test.asn1
     echo "END" >> test.asn1
     if ! ${abs_top_builddir}/asn1c/asn1c -S ${abs_top_srcdir}/skeletons \
         -gen-OER -gen-PER test.asn1
diff --git a/tests/tests-randomized/random-test-driver.c b/tests/tests-randomized/random-test-driver.c
index 0b93d96..cb7bda7 100644
--- a/tests/tests-randomized/random-test-driver.c
+++ b/tests/tests-randomized/random-test-driver.c
@@ -84,6 +84,7 @@
             "OPTIONS:\n"
             "  -c               Check encode-decode round-trip on random data\n"
             "  -g <dir>         Generate random data for selected encodings\n"
+            "  -s <size>        Approximate max random value size for -c and -g\n"
             "  -n <number>      Number of iterations for -c and -g\n"
             "  -e <encoding>    Encodings to test or generate random data for\n"
             "Encodings (ASN.1 Transfer Syntaxes):\n"
@@ -101,7 +102,7 @@
 }
 
 static void
-generate_random_data(enum asn_transfer_syntax syntax, const char *top_dirname, int iterations) {
+generate_random_data(enum asn_transfer_syntax syntax, const char *top_dirname, size_t max_random_value_size, int iterations, int debug) {
     char dirname[PATH_MAX];
     size_t dirname_len = 0;
     dirname[dirname_len] = '\0';
@@ -142,7 +143,9 @@
         snprintf(&dirname[dirname_len], sizeof(dirname) - dirname_len,
                  "/%03d.bin", i);
 
-        if(asn_random_fill(&asn_DEF_T, (void **)&structure, 128) == -1) {
+        if(asn_random_fill(&asn_DEF_T, (void **)&structure,
+                           max_random_value_size)
+           == -1) {
             assert(structure == 0);
             fprintf(stderr, "Can't generate %d'th value, skipping\n", i);
             continue;
@@ -169,11 +172,13 @@
             exit(EX_SOFTWARE);
         }
 
-        if(i < 5) {
-            fprintf(stderr, "[%s] ", &filename[dirname_len+1]);
-            asn_fprint(stderr, &asn_DEF_T, structure);
-        } else if(i == 5) {
-            fprintf(stderr, "... and so on\n");
+        if(debug) {
+            if(i < 5 || debug > 1) {
+                fprintf(stderr, "[%s] ", &filename[dirname_len+1]);
+                asn_fprint(stderr, &asn_DEF_T, structure);
+            } else if(i == 5) {
+                fprintf(stderr, "... and so on\n");
+            }
         }
 
         ASN_STRUCT_FREE(asn_DEF_T, structure);
@@ -189,7 +194,7 @@
 }
 
 static void
-check_random_roundtrip(enum asn_transfer_syntax syntax, int iterations) {
+check_random_roundtrip(enum asn_transfer_syntax syntax, size_t max_random_value_size, int iterations, int debug) {
     struct encoding_map enc;
 
     for(size_t i = 0; i < sizeof(encodings)/sizeof(encodings[0]); i++) {
@@ -208,7 +213,9 @@
         T_t *structure = 0;
         T_t *decoded_structure = 0;
 
-        if(asn_random_fill(&asn_DEF_T, (void **)&structure, 128) == -1) {
+        if(asn_random_fill(&asn_DEF_T, (void **)&structure,
+                           max_random_value_size)
+           == -1) {
             assert(structure == 0);
             fprintf(stderr, "Can't generate %d'th value, skipping\n", i);
             continue;
@@ -228,8 +235,12 @@
                 exit(EX_SOFTWARE);
             }
             if(er.encoded > buffer_size && buffer == tmp_buffer) {
-                fprintf(stderr, "Reallocate output buffer %zu -> %zu\n",
-                        buffer_size, er.encoded);
+                if(debug) {
+                    fprintf(
+                        stderr,
+                        "Reallocate output buffer %zu -> %zu (iteration %d)\n",
+                        buffer_size, er.encoded, i);
+                }
                 buffer = malloc(er.encoded + 1);
                 assert(buffer);
                 buffer[er.encoded] = '\0';
@@ -307,13 +318,18 @@
     } mode = MODE_UNKNOWN;
     const char *generate_into_dir = NULL;
     int iterations = 100;
+    size_t max_random_value_size = 128;
+    int debug = 0;
     int c;
 
-    while((c = getopt(argc, argv, "ce:g:hn:")) != -1) {
+    while((c = getopt(argc, argv, "cde:g:hn:s:")) != -1) {
         switch(c) {
         case 'c':
             mode = MODE_CHECK_RANDOM_ROUNDTRIP;
             break;
+        case 'd':
+            debug = 1;
+            break;
         case 'e':
             enabled_encodings |= 1 << lookup_syntax(optarg);
             if(enabled_encodings & (1 << ATS_INVALID)) {
@@ -336,6 +352,13 @@
                 exit(EX_DATAERR);
             }
             break;
+        case 's':
+            if(atoi(optarg) <= 0) {
+                fprintf(stderr, "-s %s: positive value expected\n", optarg);
+                exit(EX_DATAERR);
+            }
+            max_random_value_size = atoi(optarg);
+            break;
         default:
             usage(argv[0]);
             exit(2);
@@ -360,10 +383,12 @@
                 assert(mode != MODE_UNKNOWN);
                 break;
             case MODE_GENERATE_RANDOM_DATA:
-                generate_random_data(syntax, generate_into_dir, iterations);
+                generate_random_data(syntax, generate_into_dir,
+                                     max_random_value_size, iterations, debug);
                 break;
             case MODE_CHECK_RANDOM_ROUNDTRIP:
-                check_random_roundtrip(syntax, iterations);
+                check_random_roundtrip(syntax, max_random_value_size,
+                                       iterations, debug);
                 break;
             }
         }