Browse Source

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

JINMEI Tatuya 13 years ago
parent
commit
89f1ae8c2f
2 changed files with 5 additions and 2 deletions
  1. 3 1
      src/lib/dns/messagerenderer.cc
  2. 2 1
      src/lib/dns/tests/messagerenderer_unittest.cc

+ 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());
 }