Skip to content

Commit 93e58a3

Browse files
committed
Generic object's format should reject any non-empty format spec
1 parent d71fbb1 commit 93e58a3

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/ObjectBuiltins.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
9191
import com.oracle.graal.python.nodes.object.GetClassNode;
9292
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
93+
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
9394
import com.oracle.graal.python.nodes.util.SplitArgsNode;
9495
import com.oracle.truffle.api.CompilerDirectives;
9596
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
@@ -100,6 +101,7 @@
100101
import com.oracle.truffle.api.dsl.ImportStatic;
101102
import com.oracle.truffle.api.dsl.NodeFactory;
102103
import com.oracle.truffle.api.dsl.Specialization;
104+
import com.oracle.truffle.api.dsl.TypeSystemReference;
103105
import com.oracle.truffle.api.frame.VirtualFrame;
104106
import com.oracle.truffle.api.interop.InteropLibrary;
105107
import com.oracle.truffle.api.interop.UnsupportedMessageException;
@@ -572,11 +574,16 @@ Object raise(Object self, @SuppressWarnings("unused") Object dict) {
572574
}
573575

574576
@Builtin(name = __FORMAT__, minNumOfPositionalArgs = 2)
577+
@TypeSystemReference(PythonArithmeticTypes.class)
575578
@GenerateNodeFactory
576579
abstract static class FormatNode extends PythonBinaryBuiltinNode {
580+
577581
@Specialization(guards = "isString(formatString)")
578-
Object format(VirtualFrame frame, Object self, @SuppressWarnings("unused") Object formatString,
582+
Object format(VirtualFrame frame, Object self, String formatString,
579583
@Cached("create(__STR__)") LookupAndCallUnaryNode strCall) {
584+
if (formatString.length() > 0) {
585+
raise(PythonBuiltinClassType.TypeError, ErrorMessages.UNSUPPORTED_FORMAT_STRING_PASSED_TO_P_FORMAT, self);
586+
}
580587
return strCall.executeObject(frame, self);
581588
}
582589

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/ErrorMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,4 +551,5 @@ public abstract class ErrorMessages {
551551
public static final String HPY_LOAD_ERROR = "Could not load HPy C API from %s.";
552552
public static final String CANNOT_CONVERT_NEGATIVE_VALUE_TO_UNSIGNED_INT = "can't convert negative value to unsigned int";
553553
public static final String SEND_NON_NONE_TO_UNSTARTED_GENERATOR = "can't send non-None value to a just-started generator";
554+
public static final String UNSUPPORTED_FORMAT_STRING_PASSED_TO_P_FORMAT = "unsupported format string passed to %p.__format__";
554555
}

0 commit comments

Comments
 (0)