| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssh/src/sshbuf-misc.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | /* $OpenBSD: sshbuf-misc.c,v 1.6 2016/05/02 08:49:03 djm Exp $ */ | - | ||||||||||||||||||||||||
| 2 | /* | - | ||||||||||||||||||||||||
| 3 | * Copyright (c) 2011 Damien Miller | - | ||||||||||||||||||||||||
| 4 | * | - | ||||||||||||||||||||||||
| 5 | * Permission to use, copy, modify, and distribute this software for any | - | ||||||||||||||||||||||||
| 6 | * purpose with or without fee is hereby granted, provided that the above | - | ||||||||||||||||||||||||
| 7 | * copyright notice and this permission notice appear in all copies. | - | ||||||||||||||||||||||||
| 8 | * | - | ||||||||||||||||||||||||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | - | ||||||||||||||||||||||||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | - | ||||||||||||||||||||||||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | - | ||||||||||||||||||||||||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | - | ||||||||||||||||||||||||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | - | ||||||||||||||||||||||||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | - | ||||||||||||||||||||||||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | - | ||||||||||||||||||||||||
| 16 | */ | - | ||||||||||||||||||||||||
| 17 | - | |||||||||||||||||||||||||
| 18 | #include "includes.h" | - | ||||||||||||||||||||||||
| 19 | - | |||||||||||||||||||||||||
| 20 | #include <sys/types.h> | - | ||||||||||||||||||||||||
| 21 | #include <sys/socket.h> | - | ||||||||||||||||||||||||
| 22 | #include <netinet/in.h> | - | ||||||||||||||||||||||||
| 23 | #include <errno.h> | - | ||||||||||||||||||||||||
| 24 | #include <stdlib.h> | - | ||||||||||||||||||||||||
| 25 | #ifdef HAVE_STDINT_H | - | ||||||||||||||||||||||||
| 26 | #include <stdint.h> | - | ||||||||||||||||||||||||
| 27 | #endif | - | ||||||||||||||||||||||||
| 28 | #include <stdio.h> | - | ||||||||||||||||||||||||
| 29 | #include <limits.h> | - | ||||||||||||||||||||||||
| 30 | #include <string.h> | - | ||||||||||||||||||||||||
| 31 | #include <resolv.h> | - | ||||||||||||||||||||||||
| 32 | #include <ctype.h> | - | ||||||||||||||||||||||||
| 33 | - | |||||||||||||||||||||||||
| 34 | #include "ssherr.h" | - | ||||||||||||||||||||||||
| 35 | #define SSHBUF_INTERNAL | - | ||||||||||||||||||||||||
| 36 | #include "sshbuf.h" | - | ||||||||||||||||||||||||
| 37 | - | |||||||||||||||||||||||||
| 38 | void | - | ||||||||||||||||||||||||
| 39 | sshbuf_dump_data(const void *s, size_t len, FILE *f) | - | ||||||||||||||||||||||||
| 40 | { | - | ||||||||||||||||||||||||
| 41 | size_t i, j; | - | ||||||||||||||||||||||||
| 42 | const u_char *p = (const u_char *)s; | - | ||||||||||||||||||||||||
| 43 | - | |||||||||||||||||||||||||
| 44 | for (i = 0; i < len; i += 16) {
| 1 | ||||||||||||||||||||||||
| 45 | fprintf(f, "%.4zu: ", i); | - | ||||||||||||||||||||||||
| 46 | for (j = i; j < i + 16; j++) {
| 1-16 | ||||||||||||||||||||||||
| 47 | if (j < len)
| 4-12 | ||||||||||||||||||||||||
| 48 | fprintf(f, "%02x ", p[j]); executed 4 times by 1 test: fprintf(f, "%02x ", p[j]);Executed by:
| 4 | ||||||||||||||||||||||||
| 49 | else | - | ||||||||||||||||||||||||
| 50 | fprintf(f, " "); executed 12 times by 1 test: fprintf(f, " ");Executed by:
| 12 | ||||||||||||||||||||||||
| 51 | } | - | ||||||||||||||||||||||||
| 52 | fprintf(f, " "); | - | ||||||||||||||||||||||||
| 53 | for (j = i; j < i + 16; j++) {
| 1-16 | ||||||||||||||||||||||||
| 54 | if (j < len) {
| 4-12 | ||||||||||||||||||||||||
| 55 | if (isascii(p[j]) && isprint(p[j]))
| 0-4 | ||||||||||||||||||||||||
| 56 | fprintf(f, "%c", p[j]); executed 3 times by 1 test: fprintf(f, "%c", p[j]);Executed by:
| 3 | ||||||||||||||||||||||||
| 57 | else | - | ||||||||||||||||||||||||
| 58 | fprintf(f, "."); executed 1 time by 1 test: fprintf(f, ".");Executed by:
| 1 | ||||||||||||||||||||||||
| 59 | } | - | ||||||||||||||||||||||||
| 60 | } executed 16 times by 1 test: end of blockExecuted by:
| 16 | ||||||||||||||||||||||||
| 61 | fprintf(f, "\n"); | - | ||||||||||||||||||||||||
| 62 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||
| 63 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||
| 64 | - | |||||||||||||||||||||||||
| 65 | void | - | ||||||||||||||||||||||||
| 66 | sshbuf_dump(struct sshbuf *buf, FILE *f) | - | ||||||||||||||||||||||||
| 67 | { | - | ||||||||||||||||||||||||
| 68 | fprintf(f, "buffer %p len = %zu\n", buf, sshbuf_len(buf)); | - | ||||||||||||||||||||||||
| 69 | sshbuf_dump_data(sshbuf_ptr(buf), sshbuf_len(buf), f); | - | ||||||||||||||||||||||||
| 70 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||
| 71 | - | |||||||||||||||||||||||||
| 72 | char * | - | ||||||||||||||||||||||||
| 73 | sshbuf_dtob16(struct sshbuf *buf) | - | ||||||||||||||||||||||||
| 74 | { | - | ||||||||||||||||||||||||
| 75 | size_t i, j, len = sshbuf_len(buf); | - | ||||||||||||||||||||||||
| 76 | const u_char *p = sshbuf_ptr(buf); | - | ||||||||||||||||||||||||
| 77 | char *ret; | - | ||||||||||||||||||||||||
| 78 | const char hex[] = "0123456789abcdef"; | - | ||||||||||||||||||||||||
| 79 | - | |||||||||||||||||||||||||
| 80 | if (len == 0)
| 0-1 | ||||||||||||||||||||||||
| 81 | return strdup(""); never executed: return (__extension__ (__builtin_constant_p ( "" ) && ((size_t)(const void *)(( "" ) + 1) - (size_t)(const void *)( "" ) == 1) ? (((const char *) ( "" ))[0] == '\0' ? (char *) calloc ((size_t) 1, (size_t) 1) : ({ size_t __len = strlen ( "" ) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, "" , __len); __retval; })) : __strdup ( "" ))) ;never executed: __retval = (char *) memcpy (__retval, "" , __len);
| 0 | ||||||||||||||||||||||||
| 82 | if (SIZE_MAX / 2 <= len || (ret = malloc(len * 2 + 1)) == NULL)
| 0-1 | ||||||||||||||||||||||||
| 83 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||||||||
| 84 | for (i = j = 0; i < len; i++) {
| 1-4 | ||||||||||||||||||||||||
| 85 | ret[j++] = hex[(p[i] >> 4) & 0xf]; | - | ||||||||||||||||||||||||
| 86 | ret[j++] = hex[p[i] & 0xf]; | - | ||||||||||||||||||||||||
| 87 | } executed 4 times by 1 test: end of blockExecuted by:
| 4 | ||||||||||||||||||||||||
| 88 | ret[j] = '\0'; | - | ||||||||||||||||||||||||
| 89 | return ret; executed 1 time by 1 test: return ret;Executed by:
| 1 | ||||||||||||||||||||||||
| 90 | } | - | ||||||||||||||||||||||||
| 91 | - | |||||||||||||||||||||||||
| 92 | char * | - | ||||||||||||||||||||||||
| 93 | sshbuf_dtob64(struct sshbuf *buf) | - | ||||||||||||||||||||||||
| 94 | { | - | ||||||||||||||||||||||||
| 95 | size_t len = sshbuf_len(buf), plen; | - | ||||||||||||||||||||||||
| 96 | const u_char *p = sshbuf_ptr(buf); | - | ||||||||||||||||||||||||
| 97 | char *ret; | - | ||||||||||||||||||||||||
| 98 | int r; | - | ||||||||||||||||||||||||
| 99 | - | |||||||||||||||||||||||||
| 100 | if (len == 0)
| 0-22 | ||||||||||||||||||||||||
| 101 | return strdup(""); never executed: return (__extension__ (__builtin_constant_p ( "" ) && ((size_t)(const void *)(( "" ) + 1) - (size_t)(const void *)( "" ) == 1) ? (((const char *) ( "" ))[0] == '\0' ? (char *) calloc ((size_t) 1, (size_t) 1) : ({ size_t __len = strlen ( "" ) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, "" , __len); __retval; })) : __strdup ( "" ))) ;never executed: __retval = (char *) memcpy (__retval, "" , __len);
| 0 | ||||||||||||||||||||||||
| 102 | plen = ((len + 2) / 3) * 4 + 1; | - | ||||||||||||||||||||||||
| 103 | if (SIZE_MAX / 2 <= len || (ret = malloc(plen)) == NULL)
| 0-22 | ||||||||||||||||||||||||
| 104 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||||||||
| 105 | if ((r = b64_ntop(p, len, ret, plen)) == -1) {
| 0-22 | ||||||||||||||||||||||||
| 106 | explicit_bzero(ret, plen); | - | ||||||||||||||||||||||||
| 107 | free(ret); | - | ||||||||||||||||||||||||
| 108 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||||||||
| 109 | } | - | ||||||||||||||||||||||||
| 110 | return ret; executed 22 times by 2 tests: return ret;Executed by:
| 22 | ||||||||||||||||||||||||
| 111 | } | - | ||||||||||||||||||||||||
| 112 | - | |||||||||||||||||||||||||
| 113 | int | - | ||||||||||||||||||||||||
| 114 | sshbuf_b64tod(struct sshbuf *buf, const char *b64) | - | ||||||||||||||||||||||||
| 115 | { | - | ||||||||||||||||||||||||
| 116 | size_t plen = strlen(b64); | - | ||||||||||||||||||||||||
| 117 | int nlen, r; | - | ||||||||||||||||||||||||
| 118 | u_char *p; | - | ||||||||||||||||||||||||
| 119 | - | |||||||||||||||||||||||||
| 120 | if (plen == 0)
| 0-22498 | ||||||||||||||||||||||||
| 121 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
| 122 | if ((p = malloc(plen)) == NULL)
| 0-22498 | ||||||||||||||||||||||||
| 123 | return SSH_ERR_ALLOC_FAIL; never executed: return -2; | 0 | ||||||||||||||||||||||||
| 124 | if ((nlen = b64_pton(b64, p, plen)) < 0) {
| 428-22070 | ||||||||||||||||||||||||
| 125 | explicit_bzero(p, plen); | - | ||||||||||||||||||||||||
| 126 | free(p); | - | ||||||||||||||||||||||||
| 127 | return SSH_ERR_INVALID_FORMAT; executed 428 times by 1 test: return -4;Executed by:
| 428 | ||||||||||||||||||||||||
| 128 | } | - | ||||||||||||||||||||||||
| 129 | if ((r = sshbuf_put(buf, p, nlen)) < 0) {
| 0-22070 | ||||||||||||||||||||||||
| 130 | explicit_bzero(p, plen); | - | ||||||||||||||||||||||||
| 131 | free(p); | - | ||||||||||||||||||||||||
| 132 | return r; never executed: return r; | 0 | ||||||||||||||||||||||||
| 133 | } | - | ||||||||||||||||||||||||
| 134 | explicit_bzero(p, plen); | - | ||||||||||||||||||||||||
| 135 | free(p); | - | ||||||||||||||||||||||||
| 136 | return 0; executed 22070 times by 5 tests: return 0;Executed by:
| 22070 | ||||||||||||||||||||||||
| 137 | } | - | ||||||||||||||||||||||||
| 138 | - | |||||||||||||||||||||||||
| 139 | char * | - | ||||||||||||||||||||||||
| 140 | sshbuf_dup_string(struct sshbuf *buf) | - | ||||||||||||||||||||||||
| 141 | { | - | ||||||||||||||||||||||||
| 142 | const u_char *p = NULL, *s = sshbuf_ptr(buf); | - | ||||||||||||||||||||||||
| 143 | size_t l = sshbuf_len(buf); | - | ||||||||||||||||||||||||
| 144 | char *r; | - | ||||||||||||||||||||||||
| 145 | - | |||||||||||||||||||||||||
| 146 | if (s == NULL || l > SIZE_MAX)
| 0-6 | ||||||||||||||||||||||||
| 147 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||||||||
| 148 | /* accept a nul only as the last character in the buffer */ | - | ||||||||||||||||||||||||
| 149 | if (l > 0 && (p = memchr(s, '\0', l)) != NULL) {
| 1-5 | ||||||||||||||||||||||||
| 150 | if (p != s + l - 1)
| 1-3 | ||||||||||||||||||||||||
| 151 | return NULL; executed 1 time by 1 test: return ((void *)0) ;Executed by:
| 1 | ||||||||||||||||||||||||
| 152 | l--; /* the nul is put back below */ | - | ||||||||||||||||||||||||
| 153 | } executed 3 times by 2 tests: end of blockExecuted by:
| 3 | ||||||||||||||||||||||||
| 154 | if ((r = malloc(l + 1)) == NULL)
| 0-5 | ||||||||||||||||||||||||
| 155 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||||||||
| 156 | if (l > 0)
| 1-4 | ||||||||||||||||||||||||
| 157 | memcpy(r, s, l); executed 4 times by 2 tests: memcpy(r, s, l);Executed by:
| 4 | ||||||||||||||||||||||||
| 158 | r[l] = '\0'; | - | ||||||||||||||||||||||||
| 159 | return r; executed 5 times by 2 tests: return r;Executed by:
| 5 | ||||||||||||||||||||||||
| 160 | } | - | ||||||||||||||||||||||||
| 161 | - | |||||||||||||||||||||||||
| Source code | Switch to Preprocessed file |