aboutsummaryrefslogtreecommitdiffstats
path: root/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2013-05-06 12:16:45 +0200
committerErlang/OTP <[email protected]>2013-05-06 12:16:45 +0200
commit48c0c1699cff4ebd7e6750af4f1085ed9a48d005 (patch)
tree89ba4f0601eb0cfe1c1c53c8fd639e5fd4c63a8e /lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
parent9094e59fd99bd46d97ff0c7f39838eb033b61fd5 (diff)
parent0c0677a913d10b87dd4faa3fc932506f98adcc45 (diff)
downloadotp-48c0c1699cff4ebd7e6750af4f1085ed9a48d005.tar.gz
otp-48c0c1699cff4ebd7e6750af4f1085ed9a48d005.tar.bz2
otp-48c0c1699cff4ebd7e6750af4f1085ed9a48d005.zip
Merge branch 'bmk/megaco/flex_buffer_overrun_while_scanning_prop_parms/OTP-10998/r15' into maint-r15
* bmk/megaco/flex_buffer_overrun_while_scanning_prop_parms/OTP-10998/r15: [megaco] Used wrong downgrade tag for (flex) handler [megaco] Fixrd appup sub-test suite [megaco] Debug printouts in megaco test server [megaco] Internal test server not handling failing cases [megaco] Fix merge [megaco] Misc codec tickets test case fixes [megaco] Misc fixes of the (internal) megaco test server Changed name of test case functions (from seq12263 to otp10998) Assign correct version and updated release notes accordingly. Removed comments Ensure of incorrect number of terms when scanning property groups Uncommented test cases Add new messages Calculation of term_spec size (initial and next) changed Minor test case rework Test case cleanup Add rule for test beam'es Preliminary test case updates
Diffstat (limited to 'lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src')
-rw-r--r--lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src33
1 files changed, 24 insertions, 9 deletions
diff --git a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
index b8146c345d..24a0366f58 100644
--- a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
+++ b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
@@ -1,8 +1,8 @@
/*
* %CopyrightBegin%
- *
- * Copyright Ericsson AB 2001-2011. All Rights Reserved.
- *
+ *
+ * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ *
* The contents of this file are subject to the Erlang Public License,
* Version 1.1, (the "License"); you may not use this file except in
* compliance with the License. You should have received a copy of the
@@ -94,6 +94,13 @@ typedef struct {
int token_counter;
} MfsErlDrvData;
+/* IBL = In Buffer Length - the raw (un-decoded) message buffer length */
+#define TERM_SPEC_SIZE_INITIAL(IBL) (1024 + 2*(IBL))
+
+/* CTSS = Current term spec size - the current term spec length */
+/* S = Size - how many positions we need */
+#define TERM_SPEC_SIZE_NEXT(CTSS,S) ((CTSS) + 1024 + (S))
+
#if !defined(MEGACO_REENTRANT_FLEX_SCANNER)
static MfsErlDrvData mfs_drv_data;
#endif
@@ -736,7 +743,7 @@ v LOAD_TOKEN(mfs_VersionToken);
#endif
-/* #define MFS_DEBUG true */ /* temporary */
+// #define MFS_DEBUG true
#if defined(MFS_DEBUG)
# define DBG( proto ) printf proto
# define DBG_BUF(func, bufName, buf, bufSz) mfs_dbg_buf_print(func, bufName, buf, bufSz)
@@ -841,15 +848,20 @@ static void mfs_ensure_term_spec(MfsErlDrvData* dataP, int size)
"\n term_spec_size: %d\n",
dataP->term_spec_index, dataP->term_spec_size) );
- dataP->term_spec_size = (dataP->term_spec_size * 2) + size;
+ dataP->term_spec_size = TERM_SPEC_SIZE_NEXT(dataP->term_spec_size, size);
DBG( ("mfs_ensure_term_spec -> "
- "term_spec is at 0x%X, new term_spec_size is %d\n",
- (unsigned int) dataP->term_spec, dataP->term_spec_size) );
+ "term_spec is at 0x%X, new term_spec_size is %d (%lu)\n",
+ (unsigned int) dataP->term_spec,
+ dataP->term_spec_size,
+ dataP->term_spec_size * sizeof(ErlDrvTermData)) );
tmp = REALLOC(dataP->term_spec,
dataP->term_spec_size * sizeof(ErlDrvTermData));
+ DBG( ("mfs_ensure_term_spec -> "
+ "realloc result: 0x%X\n", (unsigned int) tmp) );
+
if (tmp == NULL) {
/*
* Ouch, we did'nt get any new memory.
@@ -941,6 +953,9 @@ static void mfs_octet_load_token(ErlDrvTermData TokenTag, int is_empty)
ASSIGN_TERM_SPEC(dataP, ERL_DRV_TUPLE);
ASSIGN_TERM_SPEC(dataP, 3);
+
+ DBG( ("mfs_octet_load_token -> done\n") );
+
}
#if defined(MEGACO_REENTRANT_FLEX_SCANNER)
@@ -1240,7 +1255,7 @@ static void mfs_load_property_groups(MfsErlDrvData* dataP)
} // if ((yytext[i] != SP)...
} // while ...
- mfs_ensure_term_spec(dataP, 4); // 2 + 2 just in case
+ mfs_ensure_term_spec(dataP, 6); // 3 + 3 just in case
/* Make sure we actually have some groups */
@@ -1725,7 +1740,7 @@ static ErlDrvSSizeT mfs_control(ErlDrvData handle,
dataP->text_buf = tmp;
dataP->text_ptr = tmp;
- dataP->term_spec_size = 1000 + buf_len; /* OTP-4237 */
+ dataP->term_spec_size = TERM_SPEC_SIZE_INITIAL(buf_len);
DBG( ("mfs_control -> allocate term-spec buffer: "
"\n term_spec_size: %d\n", dataP->term_spec_size) );