Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | /chat: when downloading a file via chat which has a text/... mimetype but it looks_like_binary(), change the mimetype to application/octet-stream. See code comments for the motivation behind this. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
87edfb0a48fc4643a4bd664f3f73c2e5 |
| User & Date: | stephan 2024-08-03 19:49:15.743 |
Context
|
2024-08-03
| ||
| 19:54 | Remove a redundant comment from the previous checkin. No code changes. ... (check-in: 4172bcdcea user: stephan tags: trunk) | |
| 19:49 | /chat: when downloading a file via chat which has a text/... mimetype but it looks_like_binary(), change the mimetype to application/octet-stream. See code comments for the motivation behind this. ... (check-in: 87edfb0a48 user: stephan tags: trunk) | |
|
2024-08-01
| ||
| 13:23 | Fix to "fossil patch apply": When the patch involves an ADDED_BY_MERGE file, take care to not truncate the content of that file. ... (check-in: 764c50aeff user: drh tags: trunk) | |
Changes
Changes to src/chat.c.
| ︙ | ︙ | |||
940 941 942 943 944 945 946 |
**
** - Mimetype is text/x-pikchr or P("name") ends with ".pikchr": emit
** image/svg+xml if rendering succeeds or text/html if rendering
** fails.
*/
void chat_download_webpage(void){
int msgid;
| > > | | | 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 |
**
** - Mimetype is text/x-pikchr or P("name") ends with ".pikchr": emit
** image/svg+xml if rendering succeeds or text/html if rendering
** fails.
*/
void chat_download_webpage(void){
int msgid;
int bCheckedMimetype = 0; /* true to bypass the text/... mimetype
** check at the end */
Blob r; /* file content */
const char *zMime; /* file mimetype */
const char *zName = PD("name","0");
login_check_credentials();
if( !g.perm.Chat ){
style_header("Chat Not Authorized");
@ <h1>Not Authorized</h1>
@ <p>You do not have permission to use the chatroom on this
@ repository.</p>
|
| ︙ | ︙ | |||
968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 |
const char * zMime2 = 0; /* adjusted response mimetype */
if(fossil_strcmp(zMime, "text/x-markdown")==0
/* Firefox uploads md files with the mimetype text/markdown */
|| fossil_strcmp(zMime, "text/markdown")==0){
markdown_to_html(&r, 0, &r2);
safe_html(&r2);
zMime2 = "text/html";
}else if(fossil_strcmp(zMime, "text/x-fossil-wiki")==0
|| sqlite3_strglob("*.wiki", zName)==0){
/* .wiki files get uploaded as application/octet-stream */
wiki_convert(&r, &r2, 0);
zMime2 = "text/html";
}else if(fossil_strcmp(zMime, "text/x-pikchr")==0
|| sqlite3_strglob("*.pikchr",zName)==0){
/* .pikchr files get uploaded as application/octet-stream */
const char *zPikchr = blob_str(&r);
int w = 0, h = 0;
char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
if(zOut){
blob_append(&r2, zOut, -1);
}
zMime2 = w>0 ? "image/svg+xml" : "text/html";
free(zOut);
}
if(r2.aData!=0){
blob_swap(&r, &r2);
blob_reset(&r2);
zMime = zMime2;
}
}
cgi_set_content_type(zMime);
cgi_set_content(&r);
}
/*
| > > > > > > > > > > > > > > > > > | 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 |
const char * zMime2 = 0; /* adjusted response mimetype */
if(fossil_strcmp(zMime, "text/x-markdown")==0
/* Firefox uploads md files with the mimetype text/markdown */
|| fossil_strcmp(zMime, "text/markdown")==0){
markdown_to_html(&r, 0, &r2);
safe_html(&r2);
zMime2 = "text/html";
bCheckedMimetype = 1;
}else if(fossil_strcmp(zMime, "text/x-fossil-wiki")==0
|| sqlite3_strglob("*.wiki", zName)==0){
/* .wiki files get uploaded as application/octet-stream */
wiki_convert(&r, &r2, 0);
zMime2 = "text/html";
bCheckedMimetype = 1;
}else if(fossil_strcmp(zMime, "text/x-pikchr")==0
|| sqlite3_strglob("*.pikchr",zName)==0){
/* .pikchr files get uploaded as application/octet-stream */
const char *zPikchr = blob_str(&r);
int w = 0, h = 0;
char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
if(zOut){
blob_append(&r2, zOut, -1);
}
zMime2 = w>0 ? "image/svg+xml" : "text/html";
free(zOut);
bCheckedMimetype = 1;
}
if(r2.aData!=0){
blob_swap(&r, &r2);
blob_reset(&r2);
zMime = zMime2;
}
}
if( bCheckedMimetype==0 && sqlite3_strglob("text/*", zMime)==0 ){
/* The problem: both Chrome and Firefox upload *.patch with
** the mimetype text/x-patch, whereas we very often use that
** name glob for fossil-format patches. That causes such files
** to attempt to render in the browser when clicked via
** download links in chat.
**
** The workaround: if a text/... file is looks_like_binary()
** then change the mimetype to application/octet-stream.
*/
if( looks_like_binary(&r) ){
zMime = "application/octet-stream";
}
}
cgi_set_content_type(zMime);
cgi_set_content(&r);
}
/*
|
| ︙ | ︙ |