Do not free a shallow copy of an object we'll free later

Make sure we have our own copy we can free
Fixes KDE BUG #268816
diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc
index 297cac5..7decc72 100644
--- a/poppler/Catalog.cc
+++ b/poppler/Catalog.cc
@@ -14,7 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com>
-// Copyright (C) 2005-2010 Albert Astals Cid <aacid@kde.org>
+// Copyright (C) 2005-2011 Albert Astals Cid <aacid@kde.org>
 // Copyright (C) 2005 Jeff Muizelaar <jrmuizel@nit.ca>
 // Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com>
 // Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com>
@@ -459,12 +459,10 @@
 
 GooString *Catalog::getJS(int i)
 {
-  Object obj = getJSNameTree()->getValue(i);
-  if (obj.isRef()) {
-    Ref r = obj.getRef();
-    obj.free();
-    xref->fetch(r.num, r.gen, &obj);
-  }
+  Object obj;
+  // getJSNameTree()->getValue(i) returns a shallow copy of the object so we
+  // do not need to free it
+  getJSNameTree()->getValue(i).fetch(xref, &obj);
 
   if (!obj.isDict()) {
     obj.free();
diff --git a/poppler/Catalog.h b/poppler/Catalog.h
index cea808c..d534ab2 100644
--- a/poppler/Catalog.h
+++ b/poppler/Catalog.h
@@ -57,7 +57,7 @@
   void parse(Object *tree);
   GBool lookup(GooString *name, Object *obj);
   int numEntries() { return length; };
-  // iterator accessor
+  // iterator accessor, note it returns a shallow copy, do not free the object
   Object getValue(int i);
   GooString *getName(int i);