keyval.c (1394B)
1 /* Copyright (c) 2003, Roger Dingledine 2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. 3 * Copyright (c) 2007-2021, The Tor Project, Inc. */ 4 /* See LICENSE for licensing information */ 5 6 /** 7 * \file keyval.c 8 * 9 * \brief Handle data encoded as a key=value pair. 10 **/ 11 12 #include "orconfig.h" 13 #include "lib/encoding/keyval.h" 14 #include "lib/log/escape.h" 15 #include "lib/log/log.h" 16 #include "lib/log/util_bug.h" 17 18 #include <stdlib.h> 19 #include <string.h> 20 21 /** Return true if <b>string</b> is a valid 'key=[value]' string. 22 * "value" is optional, to indicate the empty string. Log at logging 23 * <b>severity</b> if something ugly happens. */ 24 int 25 string_is_key_value(int severity, const char *string) 26 { 27 /* position of equal sign in string */ 28 const char *equal_sign_pos = NULL; 29 30 tor_assert(string); 31 32 if (strlen(string) < 2) { /* "x=" is shortest args string */ 33 tor_log(severity, LD_GENERAL, "'%s' is too short to be a k=v value.", 34 escaped(string)); 35 return 0; 36 } 37 38 equal_sign_pos = strchr(string, '='); 39 if (!equal_sign_pos) { 40 tor_log(severity, LD_GENERAL, "'%s' is not a k=v value.", escaped(string)); 41 return 0; 42 } 43 44 /* validate that the '=' is not in the beginning of the string. */ 45 if (equal_sign_pos == string) { 46 tor_log(severity, LD_GENERAL, "'%s' is not a valid k=v value.", 47 escaped(string)); 48 return 0; 49 } 50 51 return 1; 52 }