brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 39f3d8c Raw
82 lines · cpp
1// RUN: %clangxx_msan -O0 %s -o %t && %run %t2// RUN: not %run %t NTOP_READ 2>&1 | FileCheck %s --check-prefix=NTOP_READ3// RUN: not %run %t PTON_READ 2>&1 | FileCheck %s --check-prefix=PTON_READ4 5#include <assert.h>6#include <resolv.h>7#include <stdlib.h>8#include <string.h>9#include <sys/types.h>10 11#include <sanitizer/msan_interface.h>12 13int main(int iArgc, char *szArgv[]) {14  char* test = nullptr;15  if (iArgc > 1) {16    test = szArgv[1];17  }18 19  if (test == nullptr) {20    // Check NTOP writing21    const char *src = "base64 test data";22    size_t src_len = strlen(src);23    size_t dst_len = ((src_len + 2) / 3) * 4 + 1;24    char dst[dst_len];25    int res = b64_ntop(reinterpret_cast<const unsigned char *>(src), src_len,26                       dst, dst_len);27    assert(res >= 0);28    __msan_check_mem_is_initialized(dst, res);29 30    // Check PTON writing31    unsigned char target[dst_len];32    res = b64_pton(dst, target, dst_len);33    assert(res >= 0);34    __msan_check_mem_is_initialized(target, res);35 36    // Check NTOP writing for zero length src37    src = "";38    src_len = strlen(src);39    assert(((src_len + 2) / 3) * 4 + 1 < dst_len);40    res = b64_ntop(reinterpret_cast<const unsigned char *>(src), src_len,41                       dst, dst_len);42    assert(res >= 0);43    __msan_check_mem_is_initialized(dst, res);44 45    // Check PTON writing for zero length src46    dst[0] = '\0';47    res = b64_pton(dst, target, dst_len);48    assert(res >= 0);49    __msan_check_mem_is_initialized(target, res);50 51    return 0;52  }53 54  if (strcmp(test, "NTOP_READ") == 0) {55    // Check NTOP reading56    size_t src_len = 80;57    char src[src_len];58    __msan_poison(src, src_len);59    size_t dst_len = ((src_len + 2) / 3) * 4 + 1;60    char dst[dst_len];61    int res = b64_ntop(reinterpret_cast<const unsigned char *>(src), src_len,62                       dst, dst_len);63    // NTOP_READ: Uninitialized bytes in __b64_ntop64    return 0;65  }66 67  if (strcmp(test, "PTON_READ") == 0) {68    // Check PTON reading69    size_t src_len = 80;70    char src[src_len];71    strcpy(src, "junk longer than zero");72    // pretend it is uninitialized73    __msan_poison(src, src_len);74    unsigned char target[src_len];75    int res = b64_pton(src, target, src_len);76    // PTON_READ: Uninitialized bytes in __b64_pton77    return 0;78  }79 80  return 0;81}82