From 07bb14a84a3d282ac98ff33578895fd7ed147100 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Thu, 21 Apr 2016 14:17:45 +1000 Subject: [PATCH] hwlm_literal: coerce nocase lits to upper-case --- src/hwlm/hwlm_literal.cpp | 19 ++++++++++++------- src/hwlm/hwlm_literal.h | 11 +++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/hwlm/hwlm_literal.cpp b/src/hwlm/hwlm_literal.cpp index 4d8b4336..9e365a0c 100644 --- a/src/hwlm/hwlm_literal.cpp +++ b/src/hwlm/hwlm_literal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Intel Corporation + * Copyright (c) 2015-2016, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -34,13 +34,11 @@ #include "util/compare.h" // for ourisalpha #include "util/ue2string.h" // for escapeString +#include #include #include -#include - using namespace std; -using namespace boost::algorithm; namespace ue2 { @@ -91,10 +89,17 @@ hwlmLiteral::hwlmLiteral(const std::string &s_in, bool nocase_in, assert(msk.size() <= HWLM_MASKLEN); assert(msk.size() == cmp.size()); - DEBUG_PRINTF("literal '%s', msk=%s, cmp=%s\n", - escapeString(s).c_str(), dumpMask(msk).c_str(), + // If we've been handled a nocase literal, all letter characters must be + // upper-case. + if (nocase) { + upperString(s); + } + + DEBUG_PRINTF("literal '%s'%s, msk=%s, cmp=%s\n", escapeString(s).c_str(), + nocase ? " (nocase)" : "", dumpMask(msk).c_str(), dumpMask(cmp).c_str()); + // Mask and compare vectors MUST be the same size. assert(msk.size() == cmp.size()); @@ -102,7 +107,7 @@ hwlmLiteral::hwlmLiteral(const std::string &s_in, bool nocase_in, assert(maskIsConsistent(s, nocase, msk, cmp)); // In the name of good hygiene, zap msk/cmp if msk is all zeroes. - if (all_of_equal(msk.begin(), msk.end(), 0)) { + if (all_of(begin(msk), end(msk), [](u8 val) { return val == 0; })) { msk.clear(); cmp.clear(); } diff --git a/src/hwlm/hwlm_literal.h b/src/hwlm/hwlm_literal.h index ca9695bc..7e63a6f3 100644 --- a/src/hwlm/hwlm_literal.h +++ b/src/hwlm/hwlm_literal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Intel Corporation + * Copyright (c) 2015-2016, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -95,11 +95,6 @@ struct hwlmLiteral { */ std::vector cmp; - /** \brief Simple constructor: no group information, no msk/cmp. */ - hwlmLiteral(const std::string &s_in, bool nocase_in, u32 id_in) - : s(s_in), id(id_in), nocase(nocase_in), noruns(false), - groups(HWLM_ALL_GROUPS), msk(0), cmp(0) {} - /** \brief Complete constructor, takes group information and msk/cmp. * * This constructor takes a msk/cmp pair. Both must be vectors of length <= @@ -107,6 +102,10 @@ struct hwlmLiteral { hwlmLiteral(const std::string &s_in, bool nocase_in, bool noruns_in, u32 id_in, hwlm_group_t groups_in, const std::vector &msk_in, const std::vector &cmp_in); + + /** \brief Simple constructor: no group information, no msk/cmp. */ + hwlmLiteral(const std::string &s_in, bool nocase_in, u32 id_in) + : hwlmLiteral(s_in, nocase_in, false, id_in, HWLM_ALL_GROUPS, {}, {}) {} }; /**