Path: blob/main/lib/libc/tests/string/memset_s_test.c
39491 views
/*-1* Copyright (c) 2017 Juniper Networks. All rights reserved.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions5* are met:6* 1. Redistributions of source code must retain the above copyright7* notice, this list of conditions and the following disclaimer.8* 2. Redistributions in binary form must reproduce the above copyright9* notice, this list of conditions and the following disclaimer in the10* documentation and/or other materials provided with the distribution.11*12* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND13* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE14* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE15* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE16* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL17* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS18* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)19* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT20* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY21* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF22* SUCH DAMAGE.23*/2425#include <assert.h>26#include <stdint.h>27#include <stdlib.h>28#include <string.h>2930#include <atf-c.h>3132static errno_t e;33static const char * restrict m;3435void36h(const char * restrict msg, void * restrict ptr __unused, errno_t error)37{38e = error;39m = msg;40}4142/* null ptr */43ATF_TC_WITHOUT_HEAD(null_ptr);44ATF_TC_BODY(null_ptr, tc)45{46assert(memset_s(0, 1, 1, 1) != 0);47}4849/* smax > rmax */50ATF_TC_WITHOUT_HEAD(smax_gt_rmax);51ATF_TC_BODY(smax_gt_rmax, tc)52{53char b;5455assert(memset_s(&b, RSIZE_MAX + 1, 1, 1) != 0);56}5758/* smax < 0 */59ATF_TC_WITHOUT_HEAD(smax_lt_zero);60ATF_TC_BODY(smax_lt_zero, tc)61{62char b;6364assert(memset_s(&b, -1, 1, 1) != 0);65}6667/* normal */68ATF_TC_WITHOUT_HEAD(normal);69ATF_TC_BODY(normal, tc)70{71char b;7273b = 3;74assert(memset_s(&b, 1, 5, 1) == 0);75assert(b == 5);76}7778/* n > rmax */79ATF_TC_WITHOUT_HEAD(n_gt_rmax);80ATF_TC_BODY(n_gt_rmax, tc)81{82char b;8384assert(memset_s(&b, 1, 1, RSIZE_MAX + 1) != 0);85}8687/* n < 0 */88ATF_TC_WITHOUT_HEAD(n_lt_zero);89ATF_TC_BODY(n_lt_zero, tc)90{91char b;9293assert(memset_s(&b, 1, 1, -1) != 0);94}9596/* n < smax */97ATF_TC_WITHOUT_HEAD(n_lt_smax);98ATF_TC_BODY(n_lt_smax, tc)99{100char b[3] = {1, 2, 3};101102assert(memset_s(&b[0], 3, 9, 1) == 0);103assert(b[0] == 9);104assert(b[1] == 2);105assert(b[2] == 3);106}107108/* n > smax, handler */109ATF_TC_WITHOUT_HEAD(n_gt_smax);110ATF_TC_BODY(n_gt_smax, tc)111{112char b[3] = {1, 2, 3};113114e = 0;115m = NULL;116set_constraint_handler_s(h);117assert(memset_s(&b[0], 1, 9, 3) != 0);118assert(e > 0);119assert(strcmp(m, "memset_s : n > smax") == 0);120assert(b[0] == 9);121assert(b[1] == 2);122assert(b[2] == 3);123}124125/* smax > rmax, handler */126ATF_TC_WITHOUT_HEAD(smax_gt_rmax_handler);127ATF_TC_BODY(smax_gt_rmax_handler, tc)128{129char b;130131e = 0;132m = NULL;133set_constraint_handler_s(h);134assert(memset_s(&b, RSIZE_MAX + 1, 1, 1) != 0);135assert(e > 0);136assert(strcmp(m, "memset_s : smax > RSIZE_MAX") == 0);137}138139/* smax < 0, handler */140ATF_TC_WITHOUT_HEAD(smax_lt_zero_handler);141ATF_TC_BODY(smax_lt_zero_handler, tc)142{143char b;144145e = 0;146m = NULL;147set_constraint_handler_s(h);148assert(memset_s(&b, -1, 1, 1) != 0);149assert(e > 0);150assert(strcmp(m, "memset_s : smax > RSIZE_MAX") == 0);151}152153/* n > rmax, handler */154ATF_TC_WITHOUT_HEAD(n_gt_rmax_handler);155ATF_TC_BODY(n_gt_rmax_handler, tc)156{157char b;158159e = 0;160m = NULL;161set_constraint_handler_s(h);162assert(memset_s(&b, 1, 1, RSIZE_MAX + 1) != 0);163assert(e > 0);164assert(strcmp(m, "memset_s : n > RSIZE_MAX") == 0);165}166167/* n < 0, handler */168ATF_TC_WITHOUT_HEAD(n_lt_zero_handler);169ATF_TC_BODY(n_lt_zero_handler, tc)170{171char b;172173e = 0;174m = NULL;175set_constraint_handler_s(h);176assert(memset_s(&b, 1, 1, -1) != 0);177assert(e > 0);178assert(strcmp(m, "memset_s : n > RSIZE_MAX") == 0);179}180181ATF_TP_ADD_TCS(tp)182{183ATF_TP_ADD_TC(tp, null_ptr);184ATF_TP_ADD_TC(tp, smax_gt_rmax);185ATF_TP_ADD_TC(tp, smax_lt_zero);186ATF_TP_ADD_TC(tp, normal);187ATF_TP_ADD_TC(tp, n_gt_rmax);188ATF_TP_ADD_TC(tp, n_lt_zero);189ATF_TP_ADD_TC(tp, n_gt_smax);190ATF_TP_ADD_TC(tp, n_lt_smax);191ATF_TP_ADD_TC(tp, smax_gt_rmax_handler);192ATF_TP_ADD_TC(tp, smax_lt_zero_handler);193ATF_TP_ADD_TC(tp, n_gt_rmax_handler);194ATF_TP_ADD_TC(tp, n_lt_zero_handler);195return (atf_no_error());196}197198199