path: root/utils/url.h
diff options
authorMichael Drake <>2016-07-24 13:59:30 +0100
committerMichael Drake <>2016-07-24 14:03:16 +0100
commitfa2e3b778465cd496aedde8e187038835a765c4f (patch)
tree106aaf119a4b3925769adb49479274f3c886a148 /utils/url.h
parentcf753f20cc2a8506c831a5cedd933e3e78417261 (diff)
URL unescape: return the new length to the caller.
The avoids situations were we threw away the length, only for the caller to have to strlen the returned string. Note, there seems to be a case of the amiga front end writing beyond end of allocation. Added a TODO for now.
Diffstat (limited to 'utils/url.h')
1 files changed, 8 insertions, 4 deletions
diff --git a/utils/url.h b/utils/url.h
index e67d69a4f..07ad1a794 100644
--- a/utils/url.h
+++ b/utils/url.h
@@ -45,11 +45,15 @@ nserror url_escape(const char *unescaped, size_t toskip, bool sptoplus,
* Convert an escaped string to plain.
- * \param[in] str String to unescape.
- * \param[in] length Length of string or 0 to use strlen
- * \param[out] result unescaped string owned by caller must be freed with free()
+ * \param[in] str String to unescape.
+ * \param[in] length Length of string or 0 to use strlen.
+ * \param[out] length_out Iff non-NULL, value updated to length of returned
+ * result_out string.
+ * \param[out] result_out Returns unescaped string, owned by caller.
+ * Must be freed with free().
* \return NSERROR_OK on success
-nserror url_unescape(const char *str, size_t length, char **result);
+nserror url_unescape(const char *str, size_t length,
+ size_t *length_out, char **result_out);