Skip to content

Commit cc4491d

Browse files
author
Qianqian Fang
committed
avoid escaping base64 str, avoid double processing preencoded arrayzipdata
1 parent 4dc76ef commit cc4491d

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

savejson.m

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,11 @@
496496
end
497497
end
498498
for e=1:len
499-
val=escapejsonstring(item(e,:),varargin{:});
499+
if(strcmp('_ArrayZipData_',decodevarname(name,varargin{1}.unpackhex))==0)
500+
val=escapejsonstring(item(e,:),varargin{:});
501+
else
502+
val=item(e,:);
503+
end
500504
if(len==1)
501505
obj=['"' decodevarname(name,varargin{1}.unpackhex) '": ' '"',val,'"'];
502506
if(isempty(name))
@@ -533,7 +537,8 @@
533537
isnest=varargin{1}.nestarray;
534538

535539
if(((isnest==0) && length(size(item))>2) || issparse(item) || ~isreal(item) || ...
536-
(isempty(item) && any(size(item))) || varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize))
540+
(isempty(item) && any(size(item))) || varargin{1}.arraytostruct || ...
541+
(~isempty(dozip) && numel(item)>zipsize && strcmp('_ArrayZipData_',decodevarname(name,varargin{1}.unpackhex))==0))
537542
if(isempty(name))
538543
txt=sprintf('%s{%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',...
539544
padding1,nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl);
@@ -750,6 +755,9 @@
750755
%%-------------------------------------------------------------------------
751756
function newstr=escapejsonstring(str,varargin)
752757
newstr=str;
758+
if(isempty(str) || isempty(regexp(str,'\W', 'once')))
759+
return;
760+
end
753761
isoct=varargin{1}.isoctave;
754762
if(isoct)
755763
vv=sscanf(OCTAVE_VERSION,'%f');

saveubjson.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,8 @@
482482
isnest=1;
483483
end
484484
if((length(size(item))>2 && isnest==0) || issparse(item) || ~isreal(item) || ...
485-
varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize))
485+
varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize ...
486+
&& strcmp('_ArrayZipData_',decodevarname(name,varargin{:}))==0))
486487
cid=I_(uint32(max(size(item))),Imarker,varargin{:});
487488
if(isempty(name))
488489
txt=[Omarker{1} N_('_ArrayType_'),S_(class(item)),N_('_ArraySize_'),I_a(size(item),cid(1),Imarker,varargin{:}) ];

0 commit comments

Comments
 (0)