tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

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 }