Skip to content

Instantly share code, notes, and snippets.

@BenjaminPoulain
Created September 1, 2011 14:58
Show Gist options
  • Save BenjaminPoulain/1186344 to your computer and use it in GitHub Desktop.
Save BenjaminPoulain/1186344 to your computer and use it in GitHub Desktop.
diff --git a/Callgrind Viewer/FileLoader.m b/Callgrind Viewer/FileLoader.m
index 823e128..2a6c906 100644
--- a/Callgrind Viewer/FileLoader.m
+++ b/Callgrind Viewer/FileLoader.m
@@ -48,6 +48,7 @@ static inline ssize_t indexOfNextNewLineChar(const char* data, size_t offset, si
if ([_pendingDataBuffer length] > 0) {
ssize_t nextNewLine = indexOfNextNewLineChar(data, 0, size);
if (nextNewLine >= 0) {
+ assert(nextNewLine <= size);
[_pendingDataBuffer appendBytes:data length:nextNewLine];
[self processLine:(const char*)[_pendingDataBuffer bytes] size:[_pendingDataBuffer length]];
workOffset = nextNewLine + 1;
@@ -65,13 +66,19 @@ static inline ssize_t indexOfNextNewLineChar(const char* data, size_t offset, si
while (true) {
ssize_t nextNewLine = indexOfNextNewLineChar(data, workOffset, size);
if (nextNewLine >= 0) {
+ assert(workOffset < size);
+ assert(nextNewLine < size);
[self processLine: (data + workOffset) size:(nextNewLine - workOffset)];
workOffset = nextNewLine + 1;
} else {
+ assert(workOffset <= size);
size_t bytesLeft = size - workOffset;
+ if (!bytesLeft)
+ return YES;
if (bytesLeft > maxBufferSize)
return NO;
assert([_pendingDataBuffer length] == 0);
+ assert((workOffset + bytesLeft) == size);
[_pendingDataBuffer appendBytes:(data + workOffset) length:bytesLeft];
return YES;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment