Skip to content

Commit

Permalink
add explanation of how alloc works (#14288)
Browse files Browse the repository at this point in the history
  • Loading branch information
themiswang authored Dec 27, 2024
1 parent 5006c2a commit 4de32c7
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,21 @@ - (google_crashlytics_Platforms)protoPlatformFromString:(NSString *)str {
* @param data The data to copy into the new bytes array.
*/
pb_bytes_array_t *FIRCLSEncodeData(NSData *data) {
// We have received couple security tickets before for using malloc here.
// Here is a short explaination on how it is calculated so buffer overflow is prevented:
// We will alloc an amount of memeory for struct `pb_bytes_array_t`, this struct contains two
// attributes:
// pb_size_t size
// pb_byte_t bytes[1]
// It contains the size the of the data and the actually data information in byte form (which
// is represented by a pointer), for more information check the declaration in nanopb/pb.h.

// For size, NSData return size in `unsigned long` type which is the same size as `pb_size_t` and
// it is declared in compile time depending on the arch of system. If overflow happened it should
// happend at NSData level first when user trying to inserting data to NSData.
// For bytes, it is just a strict memeory copy of the data in NSData.
// The whole structure will be freed as a part of process for deallocing report in dealloc() of
// this class
pb_bytes_array_t *pbBytes = malloc(PB_BYTES_ARRAY_T_ALLOCSIZE(data.length));
if (pbBytes == NULL) {
return NULL;
Expand Down

0 comments on commit 4de32c7

Please sign in to comment.