Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix crash when specify invalid base for RR and RIF construction #39001

Merged

Conversation

user202729
Copy link
Contributor

@user202729 user202729 commented Nov 19, 2024

As in the title.

Note that currently ZZ(str, base=int) only support 2 to 36. Should this be changed for consistency?

📝 Checklist

  • The title is concise and informative.
  • The description explains in detail what this PR is about.
  • I have linked a relevant issue or discussion.
  • I have created tests covering the changes.
  • I have updated the documentation and checked the documentation preview. (There's no change in documentation.)

⌛ Dependencies


The test on Conda (Mac) fails with

2024-11-19T04:02:36.0696760Z ./bootstrap: line 142: aclocal: command not found
2024-11-19T04:02:36.0697900Z Bootstrap failed. Either install autotools; or run bootstrap with
2024-11-19T04:02:36.0698610Z the -d option to download the auto-generated files instead.

Looks unrelated.

Another one (Ubuntu 3.9) is

2024-11-19T04:26:04.0471925Z **********************************************************************
2024-11-19T04:26:04.0591101Z File "src/sage/plot/plot.py", line 1857, in sage.plot.plot.plot
2024-11-19T04:26:04.0591946Z Failed example:
2024-11-19T04:26:04.0592761Z     plot(f, (x, -3.5, 3.5), detect_poles='show', exclude=[-3..3],
2024-11-19T04:26:04.0593588Z          ymin=-5, ymax=5)
2024-11-19T04:26:04.0594061Z Expected:
2024-11-19T04:26:04.0649808Z     Graphics object consisting of 12 graphics primitives
2024-11-19T04:26:04.0650471Z Got:
2024-11-19T04:26:04.1009273Z     Graphics object consisting of 13 graphics primitives
2024-11-19T04:26:26.6704957Z **********************************************************************

Also looks unrelated. Reported in #39002.

Copy link

github-actions bot commented Nov 19, 2024

Documentation preview for this PR (built with commit ff9d834; changes) is ready! 🎉
This preview will update shortly after each push to this PR.

@user202729 user202729 force-pushed the fix-real-construct-invalid-base branch from 91063db to ff9d834 Compare November 19, 2024 03:58
@JosePisco
Copy link
Contributor

Is it a test that fails or sagemath that crashes? I can't reproduce or a weird behavior on my side.
I have read your commit but I'm not sure to catch what's the problem, a check that was not done properly?

@user202729
Copy link
Contributor Author

user202729 commented Nov 20, 2024

Before the patch when you run the test with invalid base it will crash SageMath. @JosePisco

e.g. RR("1", base=63)

strtofr.c:951: MPFR assertion failed: base == 0 || (base >= 2 && base <= 62)
------------------------------------------------------------------------
/usr/lib/python3.12/site-packages/cysignals/signals.cpython-312-x86_64-linux-gnu.so(+0x81c5) [0x7aa2fc6f91c5]
/usr/lib/python3.12/site-packages/cysignals/signals.cpython-312-x86_64-linux-gnu.so(+0x8319) [0x7aa2fc6f9319]
/usr/lib/python3.12/site-packages/cysignals/signals.cpython-312-x86_64-linux-gnu.so(+0xc64a) [0x7aa2fc6fd64a]
/usr/lib/libc.so.6(+0x3d1d0) [0x7aa2fc84c1d0]
/usr/lib/libc.so.6(+0x963f4) [0x7aa2fc8a53f4]
/usr/lib/libc.so.6(gsignal+0x20) [0x7aa2fc84c120]
/usr/lib/libc.so.6(abort+0xdf) [0x7aa2fc8334c3]
/usr/lib/libmpfr.so.6(+0xf843) [0x7aa2fa9be843]
/usr/lib/libmpfr.so.6(mpfr_strtofr+0x579) [0x7aa2faa024c9]
/usr/lib/libmpfr.so.6(mpfr_set_str+0x32) [0x7aa2fa9df7b2]
...

Maybe your libmpfr build has assertion disabled by default (?) not sure.

Maybe the first 5 tests are not directly related to the patch, but might as well be careful meanwhile.

Copy link
Contributor

@JosePisco JosePisco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I have been able to reproduce it. I applied the patch on different versions to be sure and there doesn't seem to be problems anymore.

Copy link
Collaborator

@tscrim tscrim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Indeed, that is a pretty bad crash.

vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 6, 2024
    
As in the title. It allows you to say e.g. `RIF("1.23?2e-5")`.

Partially handles sagemath#36797. (only
for real case. Complex case is not handled yet, but in principle it
should not be too difficult.)

(I don't see any disadvantage of allowing this, it's backwards
compatible)

Issue: currently

```
sage: RIF("10", base=37)
37
sage: ZZ("10", base=37)
[error]
```

should this inconsistency be fixed? If so how?

[Edit: actually the rule of conversion should probably follow [string to
mpfr conversion rule](https://www.mpfr.org/mpfr-current/mpfr.html#index-
mpfr_005fstrtofr) or [string to mpz conversion
rule](https://gmplib.org/manual/Assigning-Integers) ]

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (there's no documentation change, but should we explicitly
mention the feature? I think the feature to construct from `[a..b]`
isn't explicitly mentioned either…?)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


sagemath#39001
    
URL: sagemath#38998
Reported by: user202729
Reviewer(s): Travis Scrimshaw
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 6, 2024
…construction

    
As in the title.

Note that currently `ZZ(str, base=int)` only support 2 to 36. Should
this be changed for consistency?



### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (There's no change in documentation.)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


------

The test on Conda (Mac) fails with

```
2024-11-19T04:02:36.0696760Z ./bootstrap: line 142: aclocal: command not
found
2024-11-19T04:02:36.0697900Z Bootstrap failed. Either install autotools;
or run bootstrap with
2024-11-19T04:02:36.0698610Z the -d option to download the auto-
generated files instead.
```

Looks unrelated.

Another one (Ubuntu 3.9) is

```
2024-11-19T04:26:04.0471925Z
**********************************************************************
2024-11-19T04:26:04.0591101Z File "src/sage/plot/plot.py", line 1857, in
sage.plot.plot.plot
2024-11-19T04:26:04.0591946Z Failed example:
2024-11-19T04:26:04.0592761Z     plot(f, (x, -3.5, 3.5),
detect_poles='show', exclude=[-3..3],
2024-11-19T04:26:04.0593588Z          ymin=-5, ymax=5)
2024-11-19T04:26:04.0594061Z Expected:
2024-11-19T04:26:04.0649808Z     Graphics object consisting of 12
graphics primitives
2024-11-19T04:26:04.0650471Z Got:
2024-11-19T04:26:04.1009273Z     Graphics object consisting of 13
graphics primitives
2024-11-19T04:26:26.6704957Z
**********************************************************************
```

Also looks unrelated. Reported in sagemath#39002.
    
URL: sagemath#39001
Reported by: user202729
Reviewer(s): grnx, Travis Scrimshaw
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 8, 2024
    
As in the title. It allows you to say e.g. `RIF("1.23?2e-5")`.

Partially handles sagemath#36797. (only
for real case. Complex case is not handled yet, but in principle it
should not be too difficult.)

(I don't see any disadvantage of allowing this, it's backwards
compatible)

Issue: currently

```
sage: RIF("10", base=37)
37
sage: ZZ("10", base=37)
[error]
```

should this inconsistency be fixed? If so how?

[Edit: actually the rule of conversion should probably follow [string to
mpfr conversion rule](https://www.mpfr.org/mpfr-current/mpfr.html#index-
mpfr_005fstrtofr) or [string to mpz conversion
rule](https://gmplib.org/manual/Assigning-Integers) ]

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (there's no documentation change, but should we explicitly
mention the feature? I think the feature to construct from `[a..b]`
isn't explicitly mentioned either…?)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


sagemath#39001
    
URL: sagemath#38998
Reported by: user202729
Reviewer(s): Travis Scrimshaw
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 8, 2024
…construction

    
As in the title.

Note that currently `ZZ(str, base=int)` only support 2 to 36. Should
this be changed for consistency?



### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (There's no change in documentation.)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


------

The test on Conda (Mac) fails with

```
2024-11-19T04:02:36.0696760Z ./bootstrap: line 142: aclocal: command not
found
2024-11-19T04:02:36.0697900Z Bootstrap failed. Either install autotools;
or run bootstrap with
2024-11-19T04:02:36.0698610Z the -d option to download the auto-
generated files instead.
```

Looks unrelated.

Another one (Ubuntu 3.9) is

```
2024-11-19T04:26:04.0471925Z
**********************************************************************
2024-11-19T04:26:04.0591101Z File "src/sage/plot/plot.py", line 1857, in
sage.plot.plot.plot
2024-11-19T04:26:04.0591946Z Failed example:
2024-11-19T04:26:04.0592761Z     plot(f, (x, -3.5, 3.5),
detect_poles='show', exclude=[-3..3],
2024-11-19T04:26:04.0593588Z          ymin=-5, ymax=5)
2024-11-19T04:26:04.0594061Z Expected:
2024-11-19T04:26:04.0649808Z     Graphics object consisting of 12
graphics primitives
2024-11-19T04:26:04.0650471Z Got:
2024-11-19T04:26:04.1009273Z     Graphics object consisting of 13
graphics primitives
2024-11-19T04:26:26.6704957Z
**********************************************************************
```

Also looks unrelated. Reported in sagemath#39002.
    
URL: sagemath#39001
Reported by: user202729
Reviewer(s): grnx, Travis Scrimshaw
@vbraun vbraun merged commit 88e8ed2 into sagemath:develop Dec 8, 2024
22 of 24 checks passed
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 11, 2024
    
As in the title. It allows you to say e.g. `RIF("1.23?2e-5")`.

Partially handles sagemath#36797. (only
for real case. Complex case is not handled yet, but in principle it
should not be too difficult.)

(I don't see any disadvantage of allowing this, it's backwards
compatible)

Issue: currently

```
sage: RIF("10", base=37)
37
sage: ZZ("10", base=37)
[error]
```

should this inconsistency be fixed? If so how?

[Edit: actually the rule of conversion should probably follow [string to
mpfr conversion rule](https://www.mpfr.org/mpfr-current/mpfr.html#index-
mpfr_005fstrtofr) or [string to mpz conversion
rule](https://gmplib.org/manual/Assigning-Integers) ]

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (there's no documentation change, but should we explicitly
mention the feature? I think the feature to construct from `[a..b]`
isn't explicitly mentioned either…?)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


sagemath#39001
    
URL: sagemath#38998
Reported by: user202729
Reviewer(s): Travis Scrimshaw
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 12, 2024
    
As in the title. It allows you to say e.g. `RIF("1.23?2e-5")`.

Partially handles sagemath#36797. (only
for real case. Complex case is not handled yet, but in principle it
should not be too difficult.)

(I don't see any disadvantage of allowing this, it's backwards
compatible)

Issue: currently

```
sage: RIF("10", base=37)
37
sage: ZZ("10", base=37)
[error]
```

should this inconsistency be fixed? If so how?

[Edit: actually the rule of conversion should probably follow [string to
mpfr conversion rule](https://www.mpfr.org/mpfr-current/mpfr.html#index-
mpfr_005fstrtofr) or [string to mpz conversion
rule](https://gmplib.org/manual/Assigning-Integers) ]

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (there's no documentation change, but should we explicitly
mention the feature? I think the feature to construct from `[a..b]`
isn't explicitly mentioned either…?)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


sagemath#39001
    
URL: sagemath#38998
Reported by: user202729
Reviewer(s): Travis Scrimshaw
vbraun pushed a commit to vbraun/sage that referenced this pull request Dec 13, 2024
    
As in the title. It allows you to say e.g. `RIF("1.23?2e-5")`.

Partially handles sagemath#36797. (only
for real case. Complex case is not handled yet, but in principle it
should not be too difficult.)

(I don't see any disadvantage of allowing this, it's backwards
compatible)

Issue: currently

```
sage: RIF("10", base=37)
37
sage: ZZ("10", base=37)
[error]
```

should this inconsistency be fixed? If so how?

[Edit: actually the rule of conversion should probably follow [string to
mpfr conversion rule](https://www.mpfr.org/mpfr-current/mpfr.html#index-
mpfr_005fstrtofr) or [string to mpz conversion
rule](https://gmplib.org/manual/Assigning-Integers) ]

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview. (there's no documentation change, but should we explicitly
mention the feature? I think the feature to construct from `[a..b]`
isn't explicitly mentioned either…?)

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->


sagemath#39001
    
URL: sagemath#38998
Reported by: user202729
Reviewer(s): Travis Scrimshaw
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants