You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The documentation states that context and metadata both support Maps when using this SDK to upload images. However, when attempting to use a Map or even a standard Object, this does not seem to be fully supported. Images are uploaded with missing or entirely omitted context and no error is thrown during the call.
Issue Type (Can be multiple)
[ ] Build - Can’t install or import the SDK
[ ] Babel - Babel errors or cross browser issues
[ ] Performance - Performance issues
[x] Behaviour - Functions aren’t working as expected (Such as generate URL)
[x] Documentation - Inconsistency between the docs and behaviour
[ ] Incorrect Types - For typescript users who are having problems with our d.ts files
[ ] Other (Specify)
Steps to reproduce
The issue appears to be with the encode_context function which is used on both context and metadata options if provided:
In the case of actually providing a Map, the encode function fails to encode entirely and the result is an empty string. In the case of providing an Object, the encoding fails if any of the key/value pairs are a number. When a key value pair is a number only the value is encoded and not the key which leads to unexpected results.
The best way to test is with the following:
const{strict: assert}=require('assert')const{encode_context: encode}=require('cloudinary/lib/utils')constcontextMap=newMap()contextMap.set('storeNumber',100148)contextMap.set('vin','5YJ3E1EA1JF045327')// Fails: encoded context is an empty stringassert.equal(encode(contextMap),'storeNumber=100148|vin=5YJ3E1EA1JF045327')constcontextObj={storeNumber: 100148,vin: '5YJ3E1EA1JF045327'}// Fails: encoded context is missing `storeNumber=`assert.equal(encode(contextObj),'storeNumber=100148|vin=5YJ3E1EA1JF045327')
The encoding only appears to work if an Object is supplied and all of the key/value pairs are first converted to a String.
In the meantime we've had to resort to converting our context argument to a string before passing it to the Cloudinary SDK so we ensure consistency, ex:
Bug report for Cloudinary NPM SDK
Describe the bug in a sentence or two.
The documentation states that
context
andmetadata
both support Maps when using this SDK to upload images. However, when attempting to use a Map or even a standard Object, this does not seem to be fully supported. Images are uploaded with missing or entirely omitted context and no error is thrown during the call.Issue Type (Can be multiple)
[ ] Build - Can’t install or import the SDK
[ ] Babel - Babel errors or cross browser issues
[ ] Performance - Performance issues
[x] Behaviour - Functions aren’t working as expected (Such as generate URL)
[x] Documentation - Inconsistency between the docs and behaviour
[ ] Incorrect Types - For typescript users who are having problems with our d.ts files
[ ] Other (Specify)
Steps to reproduce
The issue appears to be with the
encode_context
function which is used on bothcontext
andmetadata
options if provided:cloudinary_npm/lib/utils/index.js
Lines 566 to 571 in 4e3b0f8
In the case of actually providing a Map, the encode function fails to encode entirely and the result is an empty string. In the case of providing an Object, the encoding fails if any of the key/value pairs are a number. When a key value pair is a number only the value is encoded and not the key which leads to unexpected results.
The best way to test is with the following:
The encoding only appears to work if an Object is supplied and all of the key/value pairs are first converted to a String.
In the meantime we've had to resort to converting our context argument to a string before passing it to the Cloudinary SDK so we ensure consistency, ex:
Versions and Libraries (fill in the version numbers)
Cloudinary_NPM SDK version - 1.26.0
Node - 14.16.1
NPM - 6.14.13
The text was updated successfully, but these errors were encountered: