summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/ap_config.h13
-rw-r--r--include/httpd.h66
2 files changed, 57 insertions, 22 deletions
diff --git a/include/ap_config.h b/include/ap_config.h
index 3bb667cdfd..41f0caf174 100644
--- a/include/ap_config.h
+++ b/include/ap_config.h
@@ -249,4 +249,17 @@
#define AP_FN_ATTR_ALLOC_SIZE2(x,y)
#endif
+#if ( defined(__GNUC__) && \
+ (__GNUC__ >= 4 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 3))) \
+ || __has_attribute(nonnull)
+/* all pointer arguments */
+#define AP_FN_ATTR_NONNULL_ALL __attribute__((nonnull))
+/* listed arguments, use with double braces: AP_FN_ATTR_NONNULL((1,3,6)) */
+#define AP_FN_ATTR_NONNULL(x) __attribute__((nonnull x))
+#else
+#define AP_FN_ATTR_NONNULL_ALL
+#define AP_FN_ATTR_NONNULL(x)
+#endif
+
+
#endif /* AP_CONFIG_H */
diff --git a/include/httpd.h b/include/httpd.h
index 51180da811..41e468bab3 100644
--- a/include/httpd.h
+++ b/include/httpd.h
@@ -1579,14 +1579,16 @@ AP_DECLARE(int) ap_unescape_urlencoded(char *query);
* Convert all double slashes to single slashes
* @param name The string to convert
*/
-AP_DECLARE(void) ap_no2slash(char *name);
+AP_DECLARE(void) ap_no2slash(char *name)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Remove all ./ and xx/../ substrings from a file name. Also remove
* any leading ../ or /../ substrings.
* @param name the file name to parse
*/
-AP_DECLARE(void) ap_getparents(char *name);
+AP_DECLARE(void) ap_getparents(char *name)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Escape a path segment, as defined in RFC 1808
@@ -1594,7 +1596,8 @@ AP_DECLARE(void) ap_getparents(char *name);
* @param s The path to convert
* @return The converted URL
*/
-AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *s);
+AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Escape a path segment, as defined in RFC 1808, to a preallocated buffer.
@@ -1602,7 +1605,8 @@ AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *s);
* @param s The path to convert
* @return The converted URL (c)
*/
-AP_DECLARE(char *) ap_escape_path_segment_buffer(char *c, const char *s);
+AP_DECLARE(char *) ap_escape_path_segment_buffer(char *c, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* convert an OS path to a URL in an OS dependent way.
@@ -1614,7 +1618,8 @@ AP_DECLARE(char *) ap_escape_path_segment_buffer(char *c, const char *s);
* NUL, to allow the caller to append a '/'.
* @return The converted URL
*/
-AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial);
+AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial)
+ AP_FN_ATTR_NONNULL_ALL;
/** @see ap_os_escape_path */
#define ap_escape_uri(ppool,path) ap_os_escape_path(ppool,path,1)
@@ -1625,7 +1630,8 @@ AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partia
* @param s The path to convert
* @return The converted URL
*/
-AP_DECLARE(char *) ap_escape_urlencoded(apr_pool_t *p, const char *s);
+AP_DECLARE(char *) ap_escape_urlencoded(apr_pool_t *p, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Escape a string as application/x-www-form-urlencoded, to a preallocated buffer
@@ -1633,7 +1639,8 @@ AP_DECLARE(char *) ap_escape_urlencoded(apr_pool_t *p, const char *s);
* @param s The path to convert
* @return The converted URL (c)
*/
-AP_DECLARE(char *) ap_escape_urlencoded_buffer(char *c, const char *s);
+AP_DECLARE(char *) ap_escape_urlencoded_buffer(char *c, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Escape an html string
@@ -1649,7 +1656,8 @@ AP_DECLARE(char *) ap_escape_urlencoded_buffer(char *c, const char *s);
* @param toasc Whether to escape all non-ASCII chars to \&\#nnn;
* @return The escaped string
*/
-AP_DECLARE(char *) ap_escape_html2(apr_pool_t *p, const char *s, int toasc);
+AP_DECLARE(char *) ap_escape_html2(apr_pool_t *p, const char *s, int toasc)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Escape a string for logging
@@ -1657,7 +1665,8 @@ AP_DECLARE(char *) ap_escape_html2(apr_pool_t *p, const char *s, int toasc);
* @param str The string to escape
* @return The escaped string
*/
-AP_DECLARE(char *) ap_escape_logitem(apr_pool_t *p, const char *str);
+AP_DECLARE(char *) ap_escape_logitem(apr_pool_t *p, const char *str)
+ AP_FN_ATTR_NONNULL((1));
/**
* Escape a string for logging into the error log (without a pool)
@@ -1667,7 +1676,8 @@ AP_DECLARE(char *) ap_escape_logitem(apr_pool_t *p, const char *str);
* @return The len of the escaped string (always < maxlen)
*/
AP_DECLARE(apr_size_t) ap_escape_errorlog_item(char *dest, const char *source,
- apr_size_t buflen);
+ apr_size_t buflen)
+ AP_FN_ATTR_NONNULL((1));
/**
* Construct a full hostname
@@ -1678,7 +1688,8 @@ AP_DECLARE(apr_size_t) ap_escape_errorlog_item(char *dest, const char *source,
* @return The server's hostname
*/
AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
- apr_port_t port, const request_rec *r);
+ apr_port_t port, const request_rec *r)
+ AP_FN_ATTR_NONNULL((1,4));
/**
* Escape a shell command
@@ -1686,14 +1697,16 @@ AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
* @param s The command to escape
* @return The escaped shell command
*/
-AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *s);
+AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;;
/**
* Count the number of directories in a path
* @param path The path to count
* @return The number of directories
*/
-AP_DECLARE(int) ap_count_dirs(const char *path);
+AP_DECLARE(int) ap_count_dirs(const char *path)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Copy at most @a n leading directories of @a s into @a d. @a d
@@ -1706,7 +1719,8 @@ AP_DECLARE(int) ap_count_dirs(const char *path);
* @note on platforms with drive letters, n = 0 returns the "/" root,
* whereas n = 1 returns the "d:/" root. On all other platforms, n = 0
* returns the empty string. */
-AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n);
+AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Return the parent directory name (including trailing /) of the file
@@ -1715,7 +1729,8 @@ AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n);
* @param s The file to get the parent of
* @return A copy of the file's parent directory
*/
-AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s);
+AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Given a directory and filename, create a single path from them. This
@@ -1730,7 +1745,8 @@ AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s);
* names that need to remain canonical, unless you are merging an apr_dir_read
* path and returned filename. Otherwise, the result is not canonical.
*/
-AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char *f);
+AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char *f)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Test if the given path has an an absolute path.
@@ -1740,7 +1756,8 @@ AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char
* multiple forms of absolute paths. This only reports if the path is absolute
* in a canonical sense.
*/
-AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir);
+AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Does the provided string contain wildcard characters? This is useful
@@ -1749,7 +1766,8 @@ AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir);
* @param str The string to check
* @return 1 if the string has wildcards, 0 otherwise
*/
-AP_DECLARE(int) ap_is_matchexp(const char *str);
+AP_DECLARE(int) ap_is_matchexp(const char *str)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Determine if a string matches a patterm containing the wildcards '?' or '*'
@@ -1757,7 +1775,8 @@ AP_DECLARE(int) ap_is_matchexp(const char *str);
* @param expected The pattern to match against
* @return 0 if the two strings match, 1 otherwise
*/
-AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected);
+AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Determine if a string matches a patterm containing the wildcards '?' or '*',
@@ -1766,7 +1785,8 @@ AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected);
* @param expected The pattern to match against
* @return 0 if the two strings match, 1 otherwise
*/
-AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *expected);
+AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *expected)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Find the first occurrence of the substring s2 in s1, regardless of case
@@ -1775,7 +1795,8 @@ AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *expected);
* @return A pointer to the beginning of the substring
* @remark See apr_strmatch() for a faster alternative
*/
-AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2);
+AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Return a pointer to the location inside of bigstring immediately after prefix
@@ -1784,7 +1805,8 @@ AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2);
* @return A pointer relative to bigstring after prefix
*/
AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
- const char *prefix);
+ const char *prefix)
+ AP_FN_ATTR_NONNULL_ALL;
/**
* Decode a base64 encoded string into memory allocated from a pool