Skip to content

Commit 50f0061

Browse files
authored
avoid Fatal on \number \fam (#2772)
* avoid Fatal on \number \fam * Error on scalar in readRegisterValue; ensure \fam wraps its value in Number()
1 parent 285bb02 commit 50f0061

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

lib/LaTeXML/Core/Gullet.pm

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -783,9 +783,11 @@ sub readValue {
783783
# Read a value from a numeric register, possibly changing sign,
784784
# possibly coercing from a bigger type (eg. a Number from a Dimension)
785785
our %RegisterCoercionTypes = (
786-
Number => { Dimension => \&Number, Glue => \&Number },
787-
Dimension => { Glue => \&Dimension },
788-
MuDimension => { MuGlue => \&MuDimension },
786+
Number => { Number => \&Number, Dimension => \&Number, Glue => \&Number },
787+
Dimension => { Dimension => \&Dimension, Glue => \&Dimension },
788+
MuDimension => { MuDimension => \&MuDimension, MuGlue => \&MuDimension },
789+
Glue => { Glue => \&Glue },
790+
MuGlue => { MuGlue => \&MuGlue },
789791
);
790792

791793
sub readRegisterValue {
@@ -800,6 +802,15 @@ sub readRegisterValue {
800802
local $LaTeXML::CURRENT_TOKEN = $token;
801803
my $parms = $$defn{parameters};
802804
my $value = $defn->valueOf(($parms ? $parms->readArguments($self) : ()));
805+
# Careful: $value may be a scalar in Erroneous(?) cases (`\number \fam`)
806+
if (!ref $value) {
807+
if ($coercer = $RegisterCoercionTypes{$type}{$rtype}) {
808+
Error("unexpected", "value", $self,
809+
"Got a scalar with value $value, will coerce from $type into $rtype");
810+
$value = &$coercer($value); }
811+
else {
812+
Error("unexpected", "value", $self,
813+
"Got a scalar with value $value, and no map to coerce $type into $rtype"); } }
803814
if ($type eq $rtype) {
804815
return ($sign < 0 ? $value->negate : $value); }
805816
else {

lib/LaTeXML/Engine/TeX_Math.pool.ltxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ DefRegister('\delcode Number', Number(-1),
635635
# but it should be initialized to -1 at beginning of every math!
636636
DefRegister('\fam' => Number(-1),
637637
getter => sub {
638-
$STATE->lookupValue('fontfamily'); },
638+
Number($STATE->lookupValue('fontfamily')); },
639639
setter => sub {
640640
my ($fam, $scope) = @_;
641641
$STATE->assignValue('fontfamily' => $fam->valueOf, $scope);

0 commit comments

Comments
 (0)