> I have found a critical Bug,
> when Inserting/Updating LONG Fields.
> 
> The Bug only occurs if the LONG-data has a certain size. 

The network protocol for LONGs requires that a special end-of-longs marker is written
and the current implementation did not reserve room for that marker.
==== //sapdb/V73/c_00/develop/sys/src/in/vin77.c#9 - 
d:\V73\c_00\develop\sys\src\in\vin77.c ====
==== (in putLongvals)
@@ -4207,6 +4207,7 @@
         descriptorLen = 0;
     }
     i28getFreePartInfo (session, REINTERPRET_CAST (void**, &dataPtr), &bufPos, 
&freeLen);
+    freeLen -= descriptorLen; /* keep room for end-of-longs-marker */
 #if defined (PUTVAL_REQUIRES_TWO_BYTE_COUNT)
     startPtr = dataPtr;
     if (forPutval) {


While searching for that bug, another flaw was detected: when an INSERT or UPDATE was 
reparsed internally, some counters weren't reinitialized, which results in a core dump.
==== //sapdb/V73/c_00/develop/sys/src/in/vin77.c#9 - 
d:\V73\c_00\develop\sys\src\in\vin77.c ====
==== (in fillParamInfos)
@@ -4546,6 +4547,8 @@
         }
     }
     parseInfo->outputParamCount = 0;
+    parseInfo->inLongCount = 0;
+    parseInfo->outLongCount = 0;
     for (i = 0; i < parseInfo->paramCount; ++i) {
         tsp1_param_info * paramInfo = &parseInfo->paramInfo [i];
         if (paramInfo->sp1i_io_type != sp1io_input) {

-- 
Daniel Dittmar
SAP DB, SAP Labs Berlin
[EMAIL PROTECTED]
http://www.sapdb.org/
_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to