Parcourir la source

[1697] made sure the used buffer is intact on reset.

JINMEI Tatuya il y a 13 ans
Parent
commit
89f1ae8c2f

+ 3 - 1
src/lib/dns/messagerenderer.cc

@@ -290,8 +290,10 @@ AbstractMessageRenderer::setBuffer(OutputBuffer* buffer) {
     }
 
     if (buffer == NULL) {
-        clear();
+        // Reset to the default buffer, then clear other internal resources.
+        // The order is important; we need to keep the used buffer intact.
         buffer_ = &local_buffer_;
+        clear();
     } else {
         buffer_ = buffer;
     }

+ 2 - 1
src/lib/dns/tests/messagerenderer_unittest.cc

@@ -184,8 +184,9 @@ TEST_F(MessageRendererTest, setBuffer) {
     EXPECT_EQ(4096, renderer.getLengthLimit());
 
     // Reset the buffer to the default again.  Other internal states and
-    // resources should be cleared.
+    // resources should be cleared.  The used buffer should be intact.
     renderer.setBuffer(NULL);
+    EXPECT_EQ(sizeof(uint32_t), new_buffer.getLength());
     EXPECT_EQ(0, renderer.getLength());
     EXPECT_EQ(512, renderer.getLengthLimit());
 }