Annotation of embedaddon/curl/tests/libtest/lib509.c, revision 1.1

1.1     ! misho       1: /***************************************************************************
        !             2:  *                                  _   _ ____  _
        !             3:  *  Project                     ___| | | |  _ \| |
        !             4:  *                             / __| | | | |_) | |
        !             5:  *                            | (__| |_| |  _ <| |___
        !             6:  *                             \___|\___/|_| \_\_____|
        !             7:  *
        !             8:  * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
        !             9:  *
        !            10:  * This software is licensed as described in the file COPYING, which
        !            11:  * you should have received as part of this distribution. The terms
        !            12:  * are also available at https://curl.haxx.se/docs/copyright.html.
        !            13:  *
        !            14:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
        !            15:  * copies of the Software, and permit persons to whom the Software is
        !            16:  * furnished to do so, under the terms of the COPYING file.
        !            17:  *
        !            18:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
        !            19:  * KIND, either express or implied.
        !            20:  *
        !            21:  ***************************************************************************/
        !            22: #include "test.h"
        !            23: 
        !            24: #include <string.h>
        !            25: 
        !            26: /*
        !            27:  * This test uses these funny custom memory callbacks for the only purpose
        !            28:  * of verifying that curl_global_init_mem() functionality is present in
        !            29:  * libcurl and that it works unconditionally no matter how libcurl is built,
        !            30:  * nothing more.
        !            31:  *
        !            32:  * Do not include memdebug.h in this source file, and do not use directly
        !            33:  * memory related functions in this file except those used inside custom
        !            34:  * memory callbacks which should be calling 'the real thing'.
        !            35:  */
        !            36: 
        !            37: /*
        !            38: #include "memdebug.h"
        !            39: */
        !            40: 
        !            41: static int seen_malloc = 0;
        !            42: static int seen_free = 0;
        !            43: static int seen_realloc = 0;
        !            44: static int seen_strdup = 0;
        !            45: static int seen_calloc = 0;
        !            46: 
        !            47: void *custom_malloc(size_t size);
        !            48: void custom_free(void *ptr);
        !            49: void *custom_realloc(void *ptr, size_t size);
        !            50: char *custom_strdup(const char *ptr);
        !            51: void *custom_calloc(size_t nmemb, size_t size);
        !            52: 
        !            53: 
        !            54: void *custom_calloc(size_t nmemb, size_t size)
        !            55: {
        !            56:   if(!seen_calloc) {
        !            57:     printf("seen custom_calloc()\n");
        !            58:     seen_calloc = 1;
        !            59:   }
        !            60:   return (calloc)(nmemb, size);
        !            61: }
        !            62: 
        !            63: void *custom_malloc(size_t size)
        !            64: {
        !            65:   if(!seen_malloc && seen_calloc) {
        !            66:     printf("seen custom_malloc()\n");
        !            67:     seen_malloc = 1;
        !            68:   }
        !            69:   return (malloc)(size);
        !            70: }
        !            71: 
        !            72: char *custom_strdup(const char *ptr)
        !            73: {
        !            74:   if(!seen_strdup && seen_malloc) {
        !            75:     /* currently (2013.03.13), memory tracking enabled builds do not call
        !            76:        the strdup callback, in this case malloc callback and memcpy are used
        !            77:        instead. If some day this is changed the following printf() should be
        !            78:        uncommented, and a line added to test definition.
        !            79:     printf("seen custom_strdup()\n");
        !            80:     */
        !            81:     seen_strdup = 1;
        !            82:   }
        !            83:   return (strdup)(ptr);
        !            84: }
        !            85: 
        !            86: void *custom_realloc(void *ptr, size_t size)
        !            87: {
        !            88:   if(!seen_realloc && seen_malloc) {
        !            89:     printf("seen custom_realloc()\n");
        !            90:     seen_realloc = 1;
        !            91:   }
        !            92:   return (realloc)(ptr, size);
        !            93: }
        !            94: 
        !            95: void custom_free(void *ptr)
        !            96: {
        !            97:   if(!seen_free && seen_realloc) {
        !            98:     printf("seen custom_free()\n");
        !            99:     seen_free = 1;
        !           100:   }
        !           101:   (free)(ptr);
        !           102: }
        !           103: 
        !           104: 
        !           105: int test(char *URL)
        !           106: {
        !           107:   unsigned char a[] = {0x2f, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
        !           108:                        0x91, 0xa2, 0xb3, 0xc4, 0xd5, 0xe6, 0xf7};
        !           109:   CURLcode res;
        !           110:   CURL *curl;
        !           111:   int asize;
        !           112:   char *str = NULL;
        !           113: 
        !           114:   (void)URL;
        !           115: 
        !           116:   res = curl_global_init_mem(CURL_GLOBAL_ALL,
        !           117:                              custom_malloc,
        !           118:                              custom_free,
        !           119:                              custom_realloc,
        !           120:                              custom_strdup,
        !           121:                              custom_calloc);
        !           122:   if(res != CURLE_OK) {
        !           123:     fprintf(stderr, "curl_global_init_mem() failed\n");
        !           124:     return TEST_ERR_MAJOR_BAD;
        !           125:   }
        !           126: 
        !           127:   curl = curl_easy_init();
        !           128:   if(!curl) {
        !           129:     fprintf(stderr, "curl_easy_init() failed\n");
        !           130:     curl_global_cleanup();
        !           131:     return TEST_ERR_MAJOR_BAD;
        !           132:   }
        !           133: 
        !           134:   test_setopt(curl, CURLOPT_USERAGENT, "test509"); /* uses strdup() */
        !           135: 
        !           136:   asize = (int)sizeof(a);
        !           137:   str = curl_easy_escape(curl, (char *)a, asize); /* uses realloc() */
        !           138: 
        !           139: test_cleanup:
        !           140: 
        !           141:   if(str)
        !           142:     curl_free(str);
        !           143: 
        !           144:   curl_easy_cleanup(curl);
        !           145:   curl_global_cleanup();
        !           146: 
        !           147:   return (int)res;
        !           148: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>