Yes they do. On Thu, Jan 20, 2022 at 12:52 PM Rony G. Flatscher <rony.flatsc...@wu.ac.at> wrote:
> At the end of November there were the following changes to > interpreter/classes/support/ProgramMetaData.{c|h}pp (rev 12325 and rev > 12327, "svn diff -r PREV ProgramMetaData.*") : > > Index: ProgramMetaData.cpp > > =================================================================== > > --- ProgramMetaData.cpp (revision 12327) > > +++ ProgramMetaData.cpp (working copy) > > @@ -304,10 +304,6 @@ > > data++; > } > > - // pass back the pointer to the metadata location, assuming for now that > - // here is metadata. > - metaData = (ProgramMetaData *)data; > - > // adjust the length for everything after the shebang > length -= data - buffer->getData(); > > @@ -314,6 +310,21 @@ > > // Now check in binary form of the compiled version > if (length > strlen(compiledHeader) && strcmp(data, compiledHeader) == 0) > { > + // the problem with having a shebang in front of the data is that it > opens the > + // possibility that the flattened program data is not aligned on an > object grain > + // boundary. This can either cause invalid objects to created on the > heap or even > + // result in data exceptions if the fields are not aligned on a > proper word boundary. > + // If this is anywhere other than the front of the buffer, we need > to shift it to > + // the front. > + > + // the returned metadata will be at the beginning > + metaData = (ProgramMetaData *)buffer->getData(); > + > + // once we've shifted it > + if (data != buffer->getData()) > + { > + memmove((void *)buffer->getData(), (void *)data, length); > + } > return true; > } > > @@ -327,8 +338,13 @@ > > > size_t decodedLength; > > + // Note that we are decoding to the beginning of the buffer, which > overwrites any > + // shebang and the binary header while also ensuring the data is > aligned on a proper > + // object grain boundary, > + metaData = (ProgramMetaData *)buffer->getData(); > + > // we now have the encoded data, decode it in place, overwriting the > compiled header > - if (!StringUtil::decodeBase64(beginEncodedData, encodedLength, data, > decodedLength)) > + if (!StringUtil::decodeBase64(beginEncodedData, encodedLength, > buffer->getData(), decodedLength)) > { > reportException(Error_Program_unreadable_invalid_encoding, > fileName); > } > Index: ProgramMetaData.hpp > > =================================================================== > > --- ProgramMetaData.hpp (revision 12325) > > +++ ProgramMetaData.hpp (working copy) > > @@ -80,8 +80,16 @@ > > uint16_t imageVersion; // version identifier for validity > uint16_t wordSize; // size of a word > uint16_t bigEndian; // true if this is a big-endian > platform > - LanguageLevel requiredLevel; // required language level for > execution > + uint32_t requiredLevel; // required language level for > execution (NB: this needs to be an explicitly sized item) > uint32_t reserved; // padding to bring imageSize to a > 64-bit boundary > + > + size_t pad; // We need to add an extra pad here > to force imageData field to be on an object grain > + // boundary so front of the buffer > can be chopped off without creating an invalid object. > + // The offset of imageData needs to > be in integral number of grain increments from the beginning. > + // so for 32 bits we are 16 + 4*2 + > 2*4 + 4 + 4 = 40 bytes for the offset, and > + // for 64-bit we are 16 + 4*2 + 2*4 + > 8 + 8 bytes for the offset. This will allow things > + // go aligned on a grain boundary on > all architectures// > + > size_t imageSize; // size of the image > char imageData[4]; // the copied image data > }; > > > Do these changes invalidate compiled ooRexx programs (with the "-e" > switch) that got compiled before these two changes took effect by any > chance? > > ---rony > > > _______________________________________________ > Oorexx-devel mailing list > Oorexx-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/oorexx-devel >
_______________________________________________ Oorexx-devel mailing list Oorexx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/oorexx-devel