X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/6789e01e9370b3b7f65d52138c5657eaa712b4d1..ab16ead7f8e3824f5099558b9d559f6520a24570:/apt-pkg/contrib/mmap.cc diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index 33c33d1c1..74870b404 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -16,7 +16,7 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#define _BSD_SOURCE +#define _DEFAULT_SOURCE #include #include @@ -411,7 +411,7 @@ unsigned long DynamicMMap::Allocate(unsigned long ItemSize) /*}}}*/ // DynamicMMap::WriteString - Write a string to the file /*{{{*/ // --------------------------------------------------------------------- -/* Strings are not aligned to anything */ +/* Strings are aligned to 16 bytes */ unsigned long DynamicMMap::WriteString(const char *String, unsigned long Len) { @@ -419,13 +419,20 @@ unsigned long DynamicMMap::WriteString(const char *String, Len = strlen(String); _error->PushToStack(); - unsigned long const Result = RawAllocate(Len+1,0); + unsigned long Result = RawAllocate(Len+1+sizeof(uint16_t),sizeof(uint16_t)); bool const newError = _error->PendingError(); _error->MergeWithStack(); if (Base == NULL || (Result == 0 && newError)) return 0; + if (Len >= std::numeric_limits::max()) + abort(); + + uint16_t LenToWrite = Len; + memcpy((char *)Base + Result, &LenToWrite, sizeof(LenToWrite)); + Result += + sizeof(LenToWrite); + memcpy((char *)Base + Result,String,Len); ((char *)Base)[Result + Len] = 0; return Result;