Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Unified Diff: third_party/protobuf/objectivec/GPBCodedOutputStream.m

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/objectivec/GPBCodedOutputStream.m
diff --git a/third_party/protobuf/objectivec/GPBCodedOutputStream.m b/third_party/protobuf/objectivec/GPBCodedOutputStream.m
index 7c3ab44715c40397eb3cdb4bc7efec9a55181d87..fd9ed66ca23b494622c65d64670c2657f1cc0d76 100644
--- a/third_party/protobuf/objectivec/GPBCodedOutputStream.m
+++ b/third_party/protobuf/objectivec/GPBCodedOutputStream.m
@@ -144,6 +144,22 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
GPBWriteRawByte(state, (int32_t)(value >> 56) & 0xFF);
}
+#if DEBUG && !defined(NS_BLOCK_ASSERTIONS)
++ (void)load {
+ // This test exists to verify that CFStrings with embedded NULLs will work
+ // for us. If this Assert fails, all code below that depends on
+ // CFStringGetCStringPtr will NOT work properly on strings that contain
+ // embedded NULLs, and we do get that in some protobufs.
+ // Note that this will not be compiled in release.
+ // We didn't feel that just keeping it in a unit test was sufficient because
+ // the Protobuf unit tests are only run when somebody is actually working
+ // on protobufs.
+ CFStringRef zeroTest = CFSTR("Test\0String");
+ const char *cString = CFStringGetCStringPtr(zeroTest, kCFStringEncodingUTF8);
+ NSAssert(cString == NULL, @"Serious Error");
+}
+#endif // DEBUG && !defined(NS_BLOCK_ASSERTIONS)
+
- (void)dealloc {
[self flush];
[state_.output close];
@@ -187,12 +203,6 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
return [[[self alloc] initWithData:data] autorelease];
}
-// Direct access is use for speed, to avoid even internally declaring things
-// read/write, etc. The warning is enabled in the project to ensure code calling
-// protos can turn on -Wdirect-ivar-access without issues.
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdirect-ivar-access"
-
- (void)writeDoubleNoTag:(double)value {
GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value));
}
@@ -266,15 +276,19 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
}
- (void)writeStringNoTag:(const NSString *)value {
- size_t length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+ // If you are concerned about embedded NULLs see the test in
+ // +load above.
+ const char *quickString =
+ CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
+ size_t length = (quickString != NULL)
+ ? strlen(quickString)
+ : [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
GPBWriteRawVarint32(&state_, (int32_t)length);
+
if (length == 0) {
return;
}
- const char *quickString =
- CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
-
// Fast path: Most strings are short, if the buffer already has space,
// add to it directly.
NSUInteger bufferBytesLeft = state_.size - state_.position;
@@ -290,7 +304,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
maxLength:bufferBytesLeft
usedLength:&usedBufferLength
encoding:NSUTF8StringEncoding
- options:(NSStringEncodingConversionOptions)0
+ options:0
range:NSMakeRange(0, [value length])
remainingRange:NULL];
}
@@ -967,8 +981,6 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
GPBWriteRawLittleEndian64(&state_, value);
}
-#pragma clang diagnostic pop
-
@end
size_t GPBComputeDoubleSizeNoTag(Float64 value) {
@@ -1018,7 +1030,14 @@ size_t GPBComputeBoolSizeNoTag(BOOL value) {
}
size_t GPBComputeStringSizeNoTag(NSString *value) {
- NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+ // If you are concerned about embedded NULLs see the test in
+ // +load above.
+ const char *quickString =
+ CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
+ NSUInteger length =
+ (quickString != NULL)
+ ? strlen(quickString)
+ : [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
return GPBComputeRawVarint32SizeForInteger(length) + length;
}
« no previous file with comments | « third_party/protobuf/objectivec/GPBCodedOutputStream.h ('k') | third_party/protobuf/objectivec/GPBDescriptor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698