From e0e05f5f5ad2d1f4a3c1ff9e9191b5432e8f30b3 Mon Sep 17 00:00:00 2001 From: Martin Stjernholm <mast@lysator.liu.se> Date: Thu, 23 Mar 2000 21:05:09 +0100 Subject: [PATCH] More robustness against objects with broken _sprintf() when formatting a backtrace. Rev: lib/master.pike.in:1.104 --- lib/master.pike.in | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/master.pike.in b/lib/master.pike.in index 23c375c811..8d1184b689 100644 --- a/lib/master.pike.in +++ b/lib/master.pike.in @@ -1,6 +1,6 @@ /* -*- Pike -*- * - * $Id: master.pike.in,v 1.103 2000/03/20 05:18:21 mast Exp $ + * $Id: master.pike.in,v 1.104 2000/03/23 20:05:09 mast Exp $ * * Master-file for Pike. * @@ -1273,7 +1273,10 @@ int canclip=0; // FIXME string stupid_describe(mixed m, int maxlen) { - switch(string typ=sprintf("%t",m)) + string typ; + if (catch (typ=sprintf("%t",m))) + typ = "object"; // Object with a broken _sprintf(), probably. + switch(typ) { case "int": case "float": @@ -1433,17 +1436,7 @@ string describe_object(object o) { string s; if(!o) return 0; - /* - // This seems broken. Maybe objects should be programs here, but - // that's essentially what the call to describe_program() below - // does. /mast - if(s=search(objects,object_program(o))) - { - if(sscanf(reverse(s),"%s.%s",string ext,string rest) && ext=="domp") - return EXPLODE_PATH(reverse(rest))[-1]; - return s; - } - */ + if (!catch(s=sprintf("%O",o)) && stringp(s)) return s; if(( s=describe_program(object_program(o)) )) return s+"()"; return 0; @@ -1576,7 +1569,8 @@ string describe_backtrace(mixed trace, void|int linewidth) else { if (tmp) { - row = sprintf("%O", tmp); + if (catch (row = sprintf("%O", tmp))) + row = describe_program(object_program(tmp)) + " with broken _sprintf()"; } else { row = "Destructed object"; } -- GitLab