summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-05-23 17:18:10 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-05-23 17:18:10 (GMT)
commit4771b91d516f6946673d4d8e6135f5a596a1dd9b (patch)
treeaccdc2daeb7283d620390d8d4fdd1a7fd7c32a34 /src
parent393d247312780c7d49af4c48107d70c3214b25ff (diff)
downloadpowder-4771b91d516f6946673d4d8e6135f5a596a1dd9b.zip
powder-4771b91d516f6946673d4d8e6135f5a596a1dd9b.tar.gz
ptsave protocol
ptsave:<id>#<name>~<username>, only ID is read, it must be the last argument (all arguments after ptsave are ignored for safety reason to prevent injecting other arguments links.
Diffstat (limited to 'src')
-rw-r--r--src/main.c69
1 files changed, 63 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index ee7f6c2..b616273 100644
--- a/src/main.c
+++ b/src/main.c
@@ -814,12 +814,12 @@ int main(int argc, char *argv[])
for (i=1; i<argc; i++)
{
- if (!strncmp(argv[i], "ddir", 4) && i+1<argc)
+ if (!strncmp(argv[i], "ddir", 5) && i+1<argc)
{
chdir(argv[i+1]);
i++;
}
- else if (!strncmp(argv[i], "open", 4) && i+1<argc)
+ else if (!strncmp(argv[i], "open", 5) && i+1<argc)
{
int size;
void *file_data;
@@ -843,6 +843,13 @@ int main(int argc, char *argv[])
}
i++;
}
+ else if (!strncmp(argv[i], "ptsave", 7) && i+1<argc)
+ {
+ //Prevent reading of any arguments after ptsave for security
+ i++;
+ argc = i+2;
+ break;
+ }
}
load_presets();
@@ -881,19 +888,69 @@ int main(int argc, char *argv[])
SDL_PauseAudio(0);
}
}
- else if (!strncmp(argv[i], "scripts", 5))
+ else if (!strncmp(argv[i], "scripts", 8))
{
file_script = 1;
}
- else if (!strncmp(argv[i], "open", 4) && i+1<argc)
+ else if (!strncmp(argv[i], "open", 5) && i+1<argc)
{
i++;
}
- else if (!strncmp(argv[i], "ddir", 4) && i+1<argc)
+ else if (!strncmp(argv[i], "ddir", 5) && i+1<argc)
{
i++;
}
-
+ else if (!strncmp(argv[i], "ptsave", 7) && i+1<argc)
+ {
+ puts("Got ptsave");
+ int ci = 0, ns = 0, okay = 0;
+ char * tempString = argv[i+1];
+ int tempStringLength = strlen(argv[i+1])-7;
+ int tempSaveID = 0;
+ char tempNumberString[32];
+ i++;
+ tempNumberString[31] = 0;
+ tempNumberString[0] = 0;
+ if(!strncmp(tempString, "ptsave:", 7) && tempStringLength)
+ {
+ puts("ptsave:// protocol");
+ tempString+=7;
+ while(tempString[ci] && ns<30 && ci<tempStringLength)
+ {
+ if(tempString[ci]>=48 && tempString[ci]<=57)
+ {
+ tempNumberString[ns++] = tempString[ci];
+ tempNumberString[ns] = 0;
+ }
+ else if(tempString[ci]=='#')
+ {
+ okay = 1;
+ break;
+ }
+ else
+ {
+ puts("ptsave: invalid save ID");
+ break;
+ }
+ ci++;
+ }
+ if(!tempString[ci])
+ {
+ break;
+ okay = 1;
+ }
+ if(okay)
+ {
+ tempSaveID = atoi(tempNumberString);
+ }
+ }
+ if(tempSaveID > 0)
+ {
+ puts("Got ptsave:id");
+ saveURIOpen = tempSaveID;
+ }
+ break;
+ }
}
make_kernel();