Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use MHD functions for url decoding #1232

Merged
merged 2 commits into from Oct 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 0 additions & 13 deletions .travis.yml
Expand Up @@ -33,11 +33,6 @@ matrix:
services: docker
language: c
compiler: gcc
- os: linux
env: DOCKER_IMAGE=debian:jessie
services: docker
language: c
compiler: gcc
- os: linux
env: DOCKER_IMAGE=debian:stretch
services: docker
Expand Down Expand Up @@ -92,14 +87,6 @@ before_script:
docker exec $(docker ps -aq) /bin/bash -c 'apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev';
docker exec $(docker ps -aq) /bin/bash -c 'apt-get install -y libsqlite3-dev libpq-dev libmariadbclient-dev libwebp-dev libmicrohttpd-dev gettext';
docker exec $(docker ps -aq) /bin/bash -c 'autoreconf -fiv';
elif [ "$DOCKER_IMAGE" = "debian:jessie" ]; then
docker exec $(docker ps -aq) /bin/bash -c 'ln -fs /usr/share/zoneinfo/UTC /etc/localtime';
docker exec $(docker ps -aq) /bin/bash -c 'export DEBIAN_FRONTEND=noninteractive';
docker exec $(docker ps -aq) /bin/bash -c 'apt-get -qq update';
docker exec $(docker ps -aq) /bin/bash -c 'apt-get install -y build-essential libjpeg62-turbo-dev libzip-dev autoconf automake autopoint pkgconf libtool git';
docker exec $(docker ps -aq) /bin/bash -c 'apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev';
docker exec $(docker ps -aq) /bin/bash -c 'apt-get install -y libsqlite3-dev libpq-dev libmysqlclient-dev libwebp-dev libmicrohttpd-dev gettext';
docker exec $(docker ps -aq) /bin/bash -c 'autoreconf -fiv';
elif [ "$DOCKER_IMAGE" = "ubuntu:16.04" ]; then
docker exec $(docker ps -aq) /bin/bash -c 'ln -fs /usr/share/zoneinfo/UTC /etc/localtime';
docker exec $(docker ps -aq) /bin/bash -c 'export DEBIAN_FRONTEND=noninteractive';
Expand Down
69 changes: 1 addition & 68 deletions src/webu.c
Expand Up @@ -4,12 +4,6 @@
* Webcontrol and Streams for motion.
*
* This software is distributed under the GNU Public License Version 2
* See also the file 'COPYING'.
*
* Portions of code from Angel Carpintero (motiondevelop@gmail.com)
* from webhttpd.c Copyright 2004-2005
*
* Majority of module written by MrDave.
*
* Function naming scheme:
* webu* - All functions in this module have this prefix.
Expand Down Expand Up @@ -231,66 +225,6 @@ void webu_write(struct webui_ctx *webui, const char *buf) {
return;
}

static int webu_url_decode(char *urlencoded, size_t length) {
/* We are sent a URI encoded string and this decodes it to characters
* If the sent URL that isn't valid, then we clear out the URL
* so it is not processed in further functions. The "answer" functions
* look for empty urls and answer with bad request
*/
char *data = urlencoded;
char *urldecoded = urlencoded;
int scan_rslt;
size_t origlen;

origlen = length;

if (urlencoded[0] != '/'){
MOTION_LOG(ERR, TYPE_STREAM, NO_ERRNO, _("Invalid url: %s"),urlencoded);
memset(urlencoded,'\0',origlen);
return -1;
}

while (length > 0) {
if (*data == '%') {
char c[3];
int i;
data++;
length--;
c[0] = *data++;
length--;
c[1] = *data;
c[2] = 0;

scan_rslt = sscanf(c, "%x", &i);
if (scan_rslt < 1){
MOTION_LOG(ERR, TYPE_STREAM, NO_ERRNO,_("Error decoding url"));
memset(urlencoded,'\0',origlen);
return -1;
}

if (i < 128) {
*urldecoded++ = (char)i;
} else {
*urldecoded++ = '%';
*urldecoded++ = c[0];
*urldecoded++ = c[1];
}

} else if (*data == '<' || *data == '+' || *data == '>') {
*urldecoded++ = ' ';
} else {
*urldecoded++ = *data;
}

data++;
length--;
}
*urldecoded = '\0';

return 0;

}

static void webu_parms_edit(struct webui_ctx *webui) {

/* Determine the thread number provided.
Expand Down Expand Up @@ -477,8 +411,7 @@ static int webu_parseurl(struct webui_ctx *webui) {

if (strlen(webui->url) == 0) return -1;

retcd = webu_url_decode(webui->url, strlen(webui->url));
if (retcd != 0) return retcd;
MHD_http_unescape(webui->url);

MOTION_LOG(DBG, TYPE_STREAM, NO_ERRNO, _("Decoded url: %s"),webui->url);

Expand Down