Fossil SCM

On the /jtext page, terminate the JSON array early if there are insufficient lines of text in the file to complete the request.

drh 2021-09-07 19:15 trunk
Commit 6f5dfd9d800e692f8d23afffd6cb1ecf07b22694160db13df6853b1eee155683
1 file changed +8 -6
+8 -6
--- src/info.c
+++ src/info.c
@@ -1900,10 +1900,11 @@
19001900
int rid = 0;
19011901
const char *zName = PD("name", "");
19021902
int iFrom = atoi(PD("from","0"));
19031903
int iTo = atoi(PD("to","0"));
19041904
int ln;
1905
+ int go = 1;
19051906
const char *zSep;
19061907
Blob content;
19071908
Blob line;
19081909
Blob *pOut;
19091910
@@ -1922,22 +1923,23 @@
19221923
}
19231924
content_get(rid, &content);
19241925
g.isConst = 1;
19251926
cgi_set_content_type("text/json");
19261927
ln = 0;
1927
- zSep = "[\n";
1928
- while( ln<iFrom ){
1929
- blob_line(&content, &line);
1928
+ while( go && ln<iFrom ){
1929
+ go = blob_line(&content, &line);
19301930
ln++;
19311931
}
19321932
pOut = cgi_output_blob();
1933
- while( ln<=iTo ){
1934
- blob_append(pOut, zSep, 2);
1933
+ blob_append(pOut, "[\n", 2);
1934
+ zSep = 0;
1935
+ while( go && ln<=iTo ){
1936
+ if( zSep ) blob_append(pOut, zSep, 2);
19351937
blob_trim(&line);
19361938
blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line));
19371939
zSep = ",\n";
1938
- blob_line(&content, &line);
1940
+ go = blob_line(&content, &line);
19391941
ln++;
19401942
}
19411943
blob_appendf(pOut,"]\n");
19421944
blob_reset(&content);
19431945
}
19441946
--- src/info.c
+++ src/info.c
@@ -1900,10 +1900,11 @@
1900 int rid = 0;
1901 const char *zName = PD("name", "");
1902 int iFrom = atoi(PD("from","0"));
1903 int iTo = atoi(PD("to","0"));
1904 int ln;
 
1905 const char *zSep;
1906 Blob content;
1907 Blob line;
1908 Blob *pOut;
1909
@@ -1922,22 +1923,23 @@
1922 }
1923 content_get(rid, &content);
1924 g.isConst = 1;
1925 cgi_set_content_type("text/json");
1926 ln = 0;
1927 zSep = "[\n";
1928 while( ln<iFrom ){
1929 blob_line(&content, &line);
1930 ln++;
1931 }
1932 pOut = cgi_output_blob();
1933 while( ln<=iTo ){
1934 blob_append(pOut, zSep, 2);
 
 
1935 blob_trim(&line);
1936 blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line));
1937 zSep = ",\n";
1938 blob_line(&content, &line);
1939 ln++;
1940 }
1941 blob_appendf(pOut,"]\n");
1942 blob_reset(&content);
1943 }
1944
--- src/info.c
+++ src/info.c
@@ -1900,10 +1900,11 @@
1900 int rid = 0;
1901 const char *zName = PD("name", "");
1902 int iFrom = atoi(PD("from","0"));
1903 int iTo = atoi(PD("to","0"));
1904 int ln;
1905 int go = 1;
1906 const char *zSep;
1907 Blob content;
1908 Blob line;
1909 Blob *pOut;
1910
@@ -1922,22 +1923,23 @@
1923 }
1924 content_get(rid, &content);
1925 g.isConst = 1;
1926 cgi_set_content_type("text/json");
1927 ln = 0;
1928 while( go && ln<iFrom ){
1929 go = blob_line(&content, &line);
 
1930 ln++;
1931 }
1932 pOut = cgi_output_blob();
1933 blob_append(pOut, "[\n", 2);
1934 zSep = 0;
1935 while( go && ln<=iTo ){
1936 if( zSep ) blob_append(pOut, zSep, 2);
1937 blob_trim(&line);
1938 blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line));
1939 zSep = ",\n";
1940 go = blob_line(&content, &line);
1941 ln++;
1942 }
1943 blob_appendf(pOut,"]\n");
1944 blob_reset(&content);
1945 }
1946

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button