* stringpool.cc (Stringpool_template::add_with_length): Set key to
authorIan Lance Taylor <ian@airs.com>
Thu, 24 Jul 2008 07:23:20 +0000 (07:23 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 24 Jul 2008 07:23:20 +0000 (07:23 +0000)
array size plus one.
(Stringpool_template::set_string_offsets): Subtract one from key
before using it as an array index.
(Stringpool_template::get_offset_with_length): Likewise.
(Stringpool_template::write_to_buffer): Likewise.
* stringpool.h (Stringpool_template::get_offset_from_key):
Likewise.

gold/ChangeLog
gold/stringpool.cc
gold/stringpool.h

index a1458995d3010b876de59bc6b1bd6bd2006d1dab..3d5d94a7f9c6dc165eb7306319d9f28543ec667f 100644 (file)
@@ -1,3 +1,14 @@
+2008-07-24  Ian Lance Taylor  <iant@google.com>
+
+       * stringpool.cc (Stringpool_template::add_with_length): Set key to
+       array size plus one.
+       (Stringpool_template::set_string_offsets): Subtract one from key
+       before using it as an array index.
+       (Stringpool_template::get_offset_with_length): Likewise.
+       (Stringpool_template::write_to_buffer): Likewise.
+       * stringpool.h (Stringpool_template::get_offset_from_key):
+       Likewise.
+
 2008-07-23  Ian Lance Taylor  <iant@google.com>
 
        PR 6658
index 0d0c904c1131a07e5e63dbcd9a8d7faf603d7608..e37846b9edc820eb09c8fd59c8f8311a5cdba0f5 100644 (file)
@@ -248,7 +248,8 @@ Stringpool_template<Stringpool_char>::add_with_length(const Stringpool_char* s,
 {
   typedef std::pair<typename String_set_type::iterator, bool> Insert_type;
 
-  const Key k = this->key_to_offset_.size();
+  // We add 1 so that 0 is always invalid.
+  const Key k = this->key_to_offset_.size() + 1;
 
   if (!copy)
     {
@@ -400,7 +401,7 @@ Stringpool_template<Stringpool_char>::set_string_offsets()
            curr != this->string_set_.end();
            curr++)
         {
-         section_offset_type* poff = &this->key_to_offset_[curr->second];
+         section_offset_type* poff = &this->key_to_offset_[curr->second - 1];
           if (this->zero_null_ && curr->first.string[0] == 0)
             *poff = 0;
           else
@@ -446,7 +447,7 @@ Stringpool_template<Stringpool_char>::set_string_offsets()
               this_offset = offset;
               offset += ((*curr)->first.length + 1) * charsize;
             }
-         this->key_to_offset_[(*curr)->second] = this_offset;
+         this->key_to_offset_[(*curr)->second - 1] = this_offset;
          last_offset = this_offset;
         }
     }
@@ -475,7 +476,7 @@ Stringpool_template<Stringpool_char>::get_offset_with_length(
   Hashkey hk(s, length);
   typename String_set_type::const_iterator p = this->string_set_.find(hk);
   if (p != this->string_set_.end())
-    return this->key_to_offset_[p->second];
+    return this->key_to_offset_[p->second - 1];
   gold_unreachable();
 }
 
@@ -496,7 +497,7 @@ Stringpool_template<Stringpool_char>::write_to_buffer(
        ++p)
     {
       const int len = (p->first.length + 1) * sizeof(Stringpool_char);
-      const section_offset_type offset = this->key_to_offset_[p->second];
+      const section_offset_type offset = this->key_to_offset_[p->second - 1];
       gold_assert(static_cast<section_size_type>(offset) + len
                  <= this->strtab_size_);
       memcpy(buffer + offset, p->first.string, len);
index 1b80842a9831212068f675cabf17d0be097f4020..6fe2066eaa45231d0d6c6d54382a253bd1770b95 100644 (file)
@@ -220,8 +220,8 @@ class Stringpool_template
   section_offset_type
   get_offset_from_key(Key k) const
   {
-    gold_assert(k < this->key_to_offset_.size());
-    return this->key_to_offset_[k];
+    gold_assert(k <= this->key_to_offset_.size());
+    return this->key_to_offset_[k - 1];
   }
 
   // Get the size of the string table.  This returns the number of
This page took 0.029337 seconds and 4 git commands to generate.