• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 15417885206

03 Jun 2025 12:54PM UTC coverage: 90.569% (-0.4%) from 90.971%
15417885206

Pull #4896

github

web-flow
Merge 99e290adb into 0ffb30b0c
Pull Request #4896: Use compile time generated switch statements for OID lookups

98749 of 109032 relevant lines covered (90.57%)

12584763.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

72.73
/src/lib/asn1/oid_map.cpp
1
/*
2
* (C) 2023 Jack Lloyd
3
*
4
* Botan is released under the Simplified BSD License (see license.txt)
5
*/
6

7
#include <botan/internal/oid_map.h>
8

9
namespace Botan {
10

11
OID_Map::OID_Map() {
2,237✔
12
   m_str2oid = OID_Map::load_str2oid_map();
2,237✔
13
   m_oid2str = OID_Map::load_oid2str_map();
2,237✔
14
}
2,237✔
15

16
OID_Map& OID_Map::global_registry() {
187,079✔
17
   static OID_Map g_map;
187,079✔
18
   return g_map;
187,079✔
19
}
20

21
void OID_Map::add_oid(const OID& oid, std::string_view str) {
11✔
22
   if(auto name = lookup_static_oid(oid)) {
11✔
23
      if(*name != str) {
1✔
24
         throw Invalid_State("Cannot register two different names to a single OID");
×
25
      } else {
26
         return;
1✔
27
      }
28
   }
29

30
   lock_guard_type<mutex_type> lock(m_mutex);
10✔
31

32
   auto o2s = m_oid2str.find(oid);
10✔
33

34
   if(o2s == m_oid2str.end()) {
10✔
35
      m_oid2str.insert(std::make_pair(oid, str));
8✔
36
   } else if(o2s->second != str) {
3✔
37
      throw Invalid_State("Cannot register two different names to a single OID");
1✔
38
   }
39

40
   auto s2o = m_str2oid.find(std::string(str));
18✔
41

42
   if(s2o == m_str2oid.end()) {
9✔
43
      m_str2oid.insert(std::make_pair(str, oid));
15✔
44
   }
45
}
9✔
46

47
void OID_Map::add_str2oid(const OID& oid, std::string_view str) {
×
48
   if(lookup_static_oid_name(str).has_value()) {
×
49
      return;
×
50
   }
51

52
   lock_guard_type<mutex_type> lock(m_mutex);
×
53
   if(!m_str2oid.contains(std::string(str))) {
×
54
      m_str2oid.insert(std::make_pair(str, oid));
×
55
   }
56
}
×
57

58
void OID_Map::add_oid2str(const OID& oid, std::string_view str) {
×
59
   if(lookup_static_oid(oid).has_value()) {
×
60
      return;
×
61
   }
62

63
   lock_guard_type<mutex_type> lock(m_mutex);
×
64
   if(!m_oid2str.contains(oid)) {
×
65
      m_oid2str.insert(std::make_pair(oid, str));
×
66
   }
67
}
×
68

69
std::string OID_Map::oid2str(const OID& oid) {
71,940✔
70
   if(auto name = lookup_static_oid(oid)) {
71,940✔
71
      return std::string(*name);
61,382✔
72
   }
73

74
   lock_guard_type<mutex_type> lock(m_mutex);
10,558✔
75

76
   auto i = m_oid2str.find(oid);
10,558✔
77
   if(i != m_oid2str.end()) {
10,558✔
78
      return i->second;
10,567✔
79
   }
80

81
   return "";
10,549✔
82
}
10,558✔
83

84
OID OID_Map::str2oid(std::string_view str) {
115,128✔
85
   if(auto oid = lookup_static_oid_name(str)) {
115,128✔
86
      return std::move(*oid);
114,863✔
87
   }
114,863✔
88

89
   lock_guard_type<mutex_type> lock(m_mutex);
265✔
90
   auto i = m_str2oid.find(std::string(str));
530✔
91
   if(i != m_str2oid.end()) {
265✔
92
      return i->second;
265✔
93
   }
94

95
   return OID();
259✔
96
}
265✔
97

98
}  // namespace Botan
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc