fixed bug in TimeToLive: get huge TTLs from cast to uint32_t of negative values
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 30 Apr 2015 07:38:23 +0000 (09:38 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 4 May 2015 14:57:58 +0000 (16:57 +0200)
src/dns/timetolive.cpp
test/data/dns_cache_example.xml [new file with mode: 0644]

index 1497042..4d628eb 100644 (file)
@@ -67,8 +67,10 @@ uint32_t TimeToLive::get_updated_value() const
     uint32_t elapsed_seconds = static_cast<uint32_t>(
             (now - TtlSetTime).total_seconds()
     );
-    uint32_t original_ttl = get_value();
-    uint32_t remaining_seconds = original_ttl - elapsed_seconds;
 
-    return remaining_seconds;
+    uint32_t original_ttl = get_value();
+    if (elapsed_seconds > original_ttl)
+        return 0;
+    else
+        return original_ttl - elapsed_seconds;
 }
diff --git a/test/data/dns_cache_example.xml b/test/data/dns_cache_example.xml
new file mode 100644 (file)
index 0000000..e3f61aa
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<!DOCTYPE boost_serialization>
+<boost_serialization signature="serialization::archive" version="7">
+<IpCache class_id="0" tracking_level="0" version="0">
+       <count>4</count>
+       <item_version>0</item_version>
+       <item class_id="1" tracking_level="0" version="0">
+               <first>abc.xyz</first>
+               <second class_id="2" tracking_level="0" version="0">
+                       <count>1</count>
+                       <item_version>0</item_version>
+                       <item class_id="3" tracking_level="0" version="0">
+                               <ip_str>11.22.33.44</ip_str>
+                               <Ttl class_id="4" tracking_level="0" version="0">
+                                       <Ttl>567</Ttl>
+                                       <ttl_creation_time>20150429T140512.609565</ttl_creation_time>
+                               </Ttl>
+                       </item>
+               </second>
+       </item>
+       <item>
+               <first>cname1.xyz</first>
+               <second>
+                       <count>0</count>
+                       <item_version>0</item_version>
+               </second>
+       </item>
+       <item>
+               <first>cname2.xyz</first>
+               <second>
+                       <count>0</count>
+                       <item_version>0</item_version>
+               </second>
+       </item>
+       <item>
+               <first>cname3.xyz</first>
+               <second>
+                       <count>0</count>
+                       <item_version>0</item_version>
+               </second>
+       </item>
+</IpCache>
+<CnameCache class_id="5" tracking_level="0" version="0">
+       <count>4</count>
+       <item_version>0</item_version>
+       <item class_id="6" tracking_level="0" version="0">
+               <first>abc.xyz</first>
+               <second class_id="7" tracking_level="0" version="0">
+                       <Host></Host>
+                       <Ttl>
+                               <Ttl>0</Ttl>
+                               <ttl_creation_time>20150429T131654.312043</ttl_creation_time>
+                       </Ttl>
+               </second>
+       </item>
+       <item>
+               <first>cname1.xyz</first>
+               <second>
+                       <Host>abc.xyz</Host>
+                       <Ttl>
+                               <Ttl>27</Ttl>
+                               <ttl_creation_time>20150429T140512.609555</ttl_creation_time>
+                       </Ttl>
+               </second>
+       </item>
+       <item>
+               <first>cname2.xyz</first>
+               <second>
+                       <Host>cname1.xyz</Host>
+                       <Ttl>
+                               <Ttl>207</Ttl>
+                               <ttl_creation_time>20150429T140512.609545</ttl_creation_time>
+                       </Ttl>
+               </second>
+       </item>
+       <item>
+               <first>cname3.xyz</first>
+               <second>
+                       <Host>cname2.xyz</Host>
+                       <Ttl>
+                               <Ttl>87</Ttl>
+                               <ttl_creation_time>20150429T140512.609533</ttl_creation_time>
+                       </Ttl>
+               </second>
+       </item>
+</CnameCache>
+</boost_serialization>
+