react-native-fetch-blob icon indicating copy to clipboard operation
react-native-fetch-blob copied to clipboard

ios crash (-[__NSCFNumber length]: unrecognized selector) when sending integer values for headers

Open jackdoe opened this issue 7 years ago • 4 comments

version info:

    "react": "16.0.0-alpha.12",
    "react-native": "0.45.1",
    "react-native-fetch-blob": "^0.10.6"

example request:

import RNFetchBlob from 'react-native-fetch-blob'
const badHeaderExample = function () {
  let b64 = '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'

  return RNFetchBlob.fetch(
    'POST',
    'https://google.com/',
    {
      integer: 1,
      'Content-Type': 'application/octet-stream'
    },
    b64
  )
    .then(r => console.log(r))
    .catch(e => console.log(e))
}

produces:

<Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x79916250'
	*** First throw call stack:
	(
		0   CoreFoundation                      0x01dc2ded __exceptionPreprocess + 189
		1   libobjc.A.dylib                     0x00d78d6f objc_exception_throw + 49
		2   CoreFoundation                      0x01e345b8 -[NSObject(NSObject) doesNotRecognizeSelector:] + 136
		3   CoreFoundation                      0x01d48a8d ___forwarding___ + 941
		4   CoreFoundation                      0x01d486be _CF_forwarding_prep_0 + 14
		5   CoreFoundation                      0x01cdfff2 CFStringGetLength + 130
		6   CFNetwork                           0x016e4602 _ZN15HTTPHeaderValue7isValidEPK10__CFString + 20
		7   CFNetwork                           0x016e4567 _ZN11HTTPMessage25setHeaderFieldStringValueEPK10__CFStringS2_ + 43
		8   CFNetwork                           0x016ecc36 _ZN11HTTPMessage23setMultipleHeaderFieldsEPK14__CFDictionary + 140
		9   CFNetwork                           0x0176276e CFURLRequestSetMultipleHTTPHeaderFields + 133
		10  CFNetwork                           0x017626e3 -[NSMutableURLRequest(NSMutableHTTPURLRequest) setAllHTTPHeaderFields:] + 44
		11  prymr                               0x0036fd7e __85+[RNFetchBlobReqBuilder buildOctetRequest:taskId:method:url:headers:body:onComplete:]_block_invoke + 4910
		12  libdispatch.dylib                   0x05cab8cf _dispatch_call_block_and_release + 15
		13  libdispatch.dylib                   0x05cce08b _dispatch_client_callout + 14
		14  libdispatch.dylib                   0x05cb35a0 _dispatch_queue_override_invoke + 682
		15  libdispatch.dylib                   0x05cb4fb6 _dispatch_root_queue_drain + 502
		16  libdispatch.dylib                   0x05cb4d58 _dispatch_worker_thread3 + 133
		17  libsystem_pthread.dylib             0x0602bc7a _pthread_wqthread + 1070
		18  libsystem_pthread.dylib             0x0602b826 start_wqthread + 34

if you change the code to send the string "1" everything works fine

expected behaviour: throw error instead of crashing

jackdoe avatar Jul 06 '17 10:07 jackdoe

@jackdoe , since the arguments(headers) you passed to native context, will be treated as string, you have to ensure every entry has a string value.

return RNFetchBlob.fetch(
    'POST',
    'https://google.com/',
    {
-      integer: 1,                                                                                                                                         
+      integer: '1',                                                                                                                                         
      'Content-Type': 'application/octet-stream'
    },
    b64
  )

wkh237 avatar Jul 06 '17 15:07 wkh237

@wkh237 yea that is what i said, i just expected normal error instead of a crash, even though it is written explicitly; up to you of course, i think its fine to close the issue, now that other people can find it as well

jackdoe avatar Jul 06 '17 17:07 jackdoe

@jackdoe , thanks for the advice, will improve the error message so that it's more clear 👍

wkh237 avatar Jul 06 '17 22:07 wkh237

this error was coming in array. which is the array has integer value but we init in string charater

so that we need to convert the integer value into string then init into string....................

thanks

mohammedimthiyasGuru avatar Jun 19 '18 13:06 mohammedimthiyasGuru