diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2014-05-02 15:13:29 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2014-05-02 15:13:29 +0000 |
commit | 5544f503bf0fcfd050b4e338e8ec7b22e2f53b9a (patch) | |
tree | 2d65f1fd285c450cbb1c676697ad13b5a47a835c /src/httrack-library.h | |
parent | b3fa8537c411e6e2d53044b1d5d20c361d2ad17d (diff) |
Big cleanup in functions writing to a char buffer without proper size boundary.
Diffstat (limited to 'src/httrack-library.h')
-rw-r--r-- | src/httrack-library.h | 95 |
1 files changed, 67 insertions, 28 deletions
diff --git a/src/httrack-library.h b/src/httrack-library.h index b3ba48a..c32a84f 100644 --- a/src/httrack-library.h +++ b/src/httrack-library.h @@ -103,14 +103,15 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt); /* Options handling */ HTSEXT_API httrackp *hts_create_opt(void); HTSEXT_API void hts_free_opt(httrackp * opt); -HTSEXT_API void set_wrappers(httrackp * opt); // DEPRECATED - DUMMY FUNCTION +HTSEXT_API const hts_stat_struct* hts_get_stats(httrackp * opt); +HTSEXT_API void set_wrappers(httrackp * opt); /* LEGACY */ HTSEXT_API int plug_wrapper(httrackp * opt, const char *moduleName, const char *argv); /* Logging */ HTSEXT_API int hts_log(httrackp * opt, const char *prefix, const char *msg); HTSEXT_API void hts_log_print(httrackp * opt, int type, const char *format, - ...); + ...) HTS_PRINTF_FUN(3, 4); /* Infos */ HTSEXT_API const char *hts_get_version_info(httrackp * opt); @@ -122,22 +123,22 @@ HTSEXT_API const hts_stat_struct* hts_get_stats(httrackp * opt); HTSEXT_API int htswrap_init(void); // DEPRECATED - DUMMY FUNCTION HTSEXT_API int htswrap_free(void); // DEPRECATED - DUMMY FUNCTION HTSEXT_API int htswrap_add(httrackp * opt, const char *name, void *fct); -HTSEXT_API unsigned long int htswrap_read(httrackp * opt, const char *name); +HTSEXT_API uintptr_t htswrap_read(httrackp * opt, const char *name); HTSEXT_API int htswrap_set_userdef(httrackp * opt, void *userdef); HTSEXT_API void *htswrap_get_userdef(httrackp * opt); /* Internal library allocators, if a different libc is being used by the client */ HTSEXT_API char *hts_strdup(const char *string); HTSEXT_API void *hts_malloc(size_t size); -HTSEXT_API void *hts_realloc(void *data, size_t size); +HTSEXT_API void *hts_realloc(void *const data, const size_t size); HTSEXT_API void hts_free(void *data); /* Other functions */ HTSEXT_API int hts_resetvar(void); // DEPRECATED - DUMMY FUNCTION HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path, const char *binpath); -HTSEXT_API const char *hts_getcategories(const char *path, int type); -HTSEXT_API const char *hts_getcategory(const char *filename); +HTSEXT_API char *hts_getcategories(char *path, int type); +HTSEXT_API char *hts_getcategory(const char *filename); /* Catch-URL */ HTSEXT_API T_SOC catch_url_init_std(int *port_prox, char *adr_prox); @@ -150,11 +151,12 @@ HTSEXT_API int hts_is_testing(httrackp * opt); HTSEXT_API int hts_is_exiting(httrackp * opt); /*HTSEXT_API int hts_setopt(httrackp* opt); DEPRECATED ; see copy_htsopt() */ + HTSEXT_API int hts_addurl(httrackp * opt, char **url); HTSEXT_API int hts_resetaddurl(httrackp * opt); -HTSEXT_API int copy_htsopt(httrackp * from, httrackp * to); +HTSEXT_API int copy_htsopt(const httrackp * from, httrackp * to); HTSEXT_API char *hts_errmsg(httrackp * opt); -HTSEXT_API int hts_setpause(httrackp * opt, int); // pause transfer +HTSEXT_API int hts_setpause(httrackp * opt, int); HTSEXT_API int hts_request_stop(httrackp * opt, int force); HTSEXT_API int hts_cancel_file_push(httrackp * opt, const char *url); HTSEXT_API void hts_cancel_test(httrackp * opt); @@ -164,46 +166,68 @@ HTSEXT_API void hts_cancel_parsing(httrackp * opt); /* Tools */ HTSEXT_API int structcheck(const char *path); +HTSEXT_API int structcheck_utf8(const char *path); HTSEXT_API int dir_exists(const char *path); HTSEXT_API void infostatuscode(char *msg, int statuscode); -HTSEXT_API HTS_INLINE TStamp mtime_local(void); +HTSEXT_API TStamp mtime_local(void); HTSEXT_API void qsec2str(char *st, TStamp t); HTSEXT_API char *int2char(strc_int2bytes2 * strc, int n); HTSEXT_API char *int2bytes(strc_int2bytes2 * strc, LLint n); HTSEXT_API char *int2bytessec(strc_int2bytes2 * strc, long int n); HTSEXT_API char **int2bytes2(strc_int2bytes2 * strc, LLint n); -HTSEXT_API char *jump_identification(char *); -HTSEXT_API char *jump_normalized(char *); -HTSEXT_API char *jump_toport(char *); -HTSEXT_API char *fil_normalized(char *source, char *dest); -HTSEXT_API char *adr_normalized(char *source, char *dest); +HTSEXT_API char *jump_identification(const char *); +HTSEXT_API char *jump_normalized(const char *); +HTSEXT_API char *jump_toport(const char *); +HTSEXT_API char *fil_normalized(const char *source, char *dest); +HTSEXT_API char *adr_normalized(const char *source, char *dest); HTSEXT_API char *hts_rootdir(char *file); /* Escaping URLs */ HTSEXT_API void unescape_amp(char *s); -HTSEXT_API void escape_spc_url(char *s); -HTSEXT_API void escape_in_url(char *s); -HTSEXT_API void escape_uri(char *s); -HTSEXT_API void escape_uri_utf(char *s); -HTSEXT_API void escape_check_url(char *s); -HTSEXT_API char *escape_check_url_addr(char *s); -HTSEXT_API void x_escape_http(char *s, int mode); -HTSEXT_API char *unescape_http(char *catbuff, const char *s); -HTSEXT_API char *unescape_http_unharm(char *catbuff, const char *s, - int no_high); + +HTSEXT_API size_t escape_spc_url(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t escape_in_url(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t escape_uri(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t escape_uri_utf(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t escape_check_url(const char *const src, char *const dest, const size_t size); + +HTSEXT_API size_t append_escape_spc_url(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t append_escape_in_url(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t append_escape_uri(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t append_escape_uri_utf(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t append_escape_check_url(const char *const src, char *const dest, const size_t size); + +HTSEXT_API size_t inplace_escape_spc_url(char *const dest, const size_t size); +HTSEXT_API size_t inplace_escape_in_url(char *const dest, const size_t size); +HTSEXT_API size_t inplace_escape_uri(char *const dest, const size_t size); +HTSEXT_API size_t inplace_escape_uri_utf(char *const dest, const size_t size); +HTSEXT_API size_t inplace_escape_check_url(char *const dest, const size_t size); + +HTSEXT_API char *escape_check_url_addr(const char *const src, char *const dest, const size_t size); +HTSEXT_API size_t make_content_id(const char *const adr, const char *const fil, char *const dest, const size_t size); + +HTSEXT_API size_t x_escape_http(const char *const s, char *const dest, const size_t max_size, const int mode); +HTSEXT_API void escape_remove_control(char *const s); +HTSEXT_API size_t escape_for_html_print(const char *const s, char *const dest, const size_t size); +HTSEXT_API size_t escape_for_html_print_full(const char *const s, char *const dest, const size_t size); + +HTSEXT_API char *unescape_http(char *const catbuff, const size_t size, const char *const s); +HTSEXT_API char *unescape_http_unharm(char *const catbuff, const size_t size, const char *s, const int no_high); HTSEXT_API char *antislash_unescaped(char *catbuff, const char *s); + HTSEXT_API void escape_remove_control(char *s); HTSEXT_API void get_httptype(httrackp * opt, char *s, const char *fil, int flag); HTSEXT_API int is_knowntype(httrackp * opt, const char *fil); HTSEXT_API int is_userknowntype(httrackp * opt, const char *fil); HTSEXT_API int is_dyntype(const char *fil); -HTSEXT_API char *get_ext(char *catbuff, const char *fil); +HTSEXT_API char *get_ext(char *catbuff, size_t size, const char *fil); /* Ugly string tools */ -HTSEXT_API char *concat(char *catbuff, const char *a, const char *b); -HTSEXT_API char *fconcat(char *catbuff, const char *a, const char *b); -HTSEXT_API char *fconv(char *catbuff, const char *a); +HTSEXT_API char *concat(char *catbuff, size_t size, const char *a, const char *b); +HTSEXT_API char *fconcat(char *catbuff, size_t size, const char *a, const char *b); +HTSEXT_API char *fconv(char *catbuff, size_t size, const char *a); +HTSEXT_API char *fslash(char *catbuff, size_t size, const char *a); /* Debugging */ HTSEXT_API void hts_debug(int level); @@ -273,4 +297,19 @@ typedef struct utimbuf STRUCT_UTIMBUF; #define HTS_DEF_FILEAPI #endif +/** Macro aimed to break at build-time if a size is not a sizeof() strictly + * greater than sizeof(char*). **/ +#undef COMPILE_TIME_CHECK_SIZE +#define COMPILE_TIME_CHECK_SIZE(A) ((void (*)(char[A - sizeof(char*) - 1])) NULL) + +/** Macro aimed to break at compile-time if a size is not a sizeof() strictly + * greater than sizeof(char*). **/ +#undef RUNTIME_TIME_CHECK_SIZE +#define RUNTIME_TIME_CHECK_SIZE(A) assert((A) != sizeof(void*)) + +#define fconv(A,B,C) (COMPILE_TIME_CHECK_SIZE(B), fconv(A,B,C)) +#define concat(A,B,C,D) (COMPILE_TIME_CHECK_SIZE(B), concat(A,B,C,D)) +#define fconcat(A,B,C,D) (COMPILE_TIME_CHECK_SIZE(B), fconcat(A,B,C,D)) +#define fslash(A,B,C) (COMPILE_TIME_CHECK_SIZE(B), fslash(A,B,C)) + #endif |