diff options
author | Robin Krahl <me@robin-krahl.de> | 2016-03-10 17:48:52 +0100 |
---|---|---|
committer | Robin Krahl <me@robin-krahl.de> | 2016-03-10 17:48:52 +0100 |
commit | 2d3fffa502e808452848b7396b4e121917ddc787 (patch) | |
tree | bf1454029d010ed8d08c0788c239828b28a54e7a /dbfp.c | |
parent | 4c68c15d4d3102b26b824b0021901d1dd9d79e77 (diff) | |
download | dbfp-2d3fffa502e808452848b7396b4e121917ddc787.tar.gz dbfp-2d3fffa502e808452848b7396b4e121917ddc787.tar.bz2 |
dbfp: URL-encode the input for the location query
In dbfp_query_location_name, URL-encode the input string using curl
before sending the HTTP request. This fixes the issue that input
strings with non-URL characters leed to empty results.
Diffstat (limited to 'dbfp.c')
-rw-r--r-- | dbfp.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -94,7 +94,8 @@ void dbfp_close(struct dbfp *dbfp) int dbfp_query_location_name(struct dbfp *dbfp, char *input, size_t *n, struct dbfp_location **locations) { - int err; + int err = 0; + char *input_enc = NULL; char *query = NULL; XML_Parser parser = NULL; int len; @@ -107,14 +108,17 @@ int dbfp_query_location_name(struct dbfp *dbfp, char *input, *n = 0; *locations = NULL; - /* - * TODO(robin.krahl): improve query building and implement HTML - * encoding. - */ + input_enc = curl_easy_escape(dbfp->curl, input, 0); + if (!input_enc) { + err = DBFP_ERROR_CURL; + goto cleanup; + } query = malloc(DBFP_URL_LEN); - if (!query) - return ENOMEM; - len = snprintf(query, DBFP_URL_LEN, "input=%s", input); + if (!query) { + err = ENOMEM; + goto cleanup; + } + len = snprintf(query, DBFP_URL_LEN, "input=%s", input_enc); if (len < 0 || len >= DBFP_URL_LEN) { err = DBFP_ERROR_FORMAT; goto cleanup; @@ -136,6 +140,8 @@ int dbfp_query_location_name(struct dbfp *dbfp, char *input, cleanup: if (err) free(ld.locations); + if (input_enc) + curl_free(input_enc); XML_ParserFree(parser); free(query); |