Commit graph

9193 commits

Author SHA1 Message Date
Nobuyoshi Nakada
8d5d6ec6e7
[pty] Fix missing or 2024-04-14 20:35:34 +09:00
Nobuyoshi Nakada
3368913be3 [pty] Fix ptsname_r fallback
If `posix_openpt` is available, also `ptsname` should be available.
2024-04-14 20:27:05 +09:00
yui-knk
38b8bdb8ea Remove undefined function's prototype declaration
89cfc15207 removed the definition of these functions.
2024-04-14 10:51:16 +09:00
Nobuyoshi Nakada
e7f8db9079
[pty] Support ptsname_r of glibc
Although glibc `ptsname_r` man page mentions Tru64 and HP-UX, this
function appears to be declared obsolete on both.
2024-04-11 17:57:52 +09:00
Nobuyoshi Nakada
0bc71828b5 [pty] Split chfunc into functions in steps
- start a new session
- obtain the new controlling terminal
- drop privileges
- finally, `exec`
2024-04-09 22:50:09 +09:00
Nobuyoshi Nakada
c4dadfbd47
Fix a typo, missing P in SETPGRP_VOID 2024-04-07 20:54:00 +09:00
Nobuyoshi Nakada
3ac6a03b2e
Revert "hijack SIGCHLD handler for internal use"
This reverts commit 054a412d54.
SIGCHLD `waidpid`, `waitpid_lock` and related code, have been removed
at ruby/ruby#7527.
2024-04-04 21:48:14 +09:00
Hiroshi SHIBATA
ab65148c78 [flori/json] Bump up 2.7.2
036944acc6
2024-04-04 12:46:02 +09:00
Hiroshi SHIBATA
514b415d90 [flori/json] Warn to install ostruct if json couldn't load it
fff285968d
2024-04-04 12:46:02 +09:00
tompng
066bd28cff [flori/json] Autoload GenericObject to avoid require ostruct warning in Ruby 3.4
b507f9e404
2024-04-04 12:46:01 +09:00
yui-knk
e816ab0b0c Remove rb_imemo_tmpbuf_t from parser
No parser semantic value types are `VALUE` then no need to
use imemo for managing semantic value stack anymore.
2024-04-02 19:37:27 +09:00
yui-knk
799e854897 [Feature #20331] Simplify parser warnings for hash keys duplication and when clause duplication
This commit simplifies warnings for hash keys duplication and when clause duplication,
based on the discussion of https://bugs.ruby-lang.org/issues/20331.
Warnings are reported only when strings are same to ohters.
2024-04-02 08:26:58 +09:00
Hiroshi SHIBATA
7630a89a4b Use www.rfc-editor.org for RFC text.
We use the following site for that now:

* https://tools.ietf.org/ or http
* https://datatracker.ietf.org or http

Today, IETF said the official site of RFC is www.rfc-editor.org.

FYI: https://authors.ietf.org/en/references-in-rfcxml

I replaced them to www.rfc-editor.org.
2024-03-28 11:44:45 +09:00
Nobuyoshi Nakada
51e6becd39 [ruby/stringio] Extract readonly_string_p
0da5b725c8
2024-03-27 17:41:38 +00:00
Nobuyoshi Nakada
06563d78a1 [ruby/stringio] Adjust styles [ci skip]
4e8e82fc30
2024-03-28 02:27:20 +09:00
Étienne Barrié
0f5ab4ad52 [ruby/stringio] Eagerly defrost chilled strings
[Feature #20390]

17ee957f34

Co-authored-by: Jean Boussier <byroot@ruby-lang.org>
2024-03-28 02:27:19 +09:00
Peter Zhu
6e34386794
[flori/json] Fix memory leak when exception is raised during JSON generation
If an exception is raised the FBuffer is leaked.

For example, the following script leaks memory:

    o = Object.new
    def o.to_json(a) = raise

    10.times do
      100_000.times do
        begin
          JSON(o)
        rescue
        end
      end

      puts `ps -o rss= -p #{$$}`
    end

Before:

    31824
    35696
    40240
    44304
    47424
    50944
    54000
    58384
    62416
    65296

After:

    24416
    24640
    24640
    24736
    24736
    24736
    24736
    24736
    24736
    24736

44df509dc2
2024-03-27 08:24:28 +09:00
Étienne Barrié
2b08406cd0 Expose rb_str_chilled_p
Some extensions (like stringio) may need to differentiate between
chilled strings and frozen strings.

They can now use rb_str_chilled_p but must check for its presence since
the function will be removed when chilled strings are removed.

[Bug #20389]

[Feature #20205]

Co-authored-by: Jean Boussier <byroot@ruby-lang.org>
2024-03-26 12:54:54 +01:00
Nobuyoshi Nakada
8265a7531f
Use dedicated methods to abort
When `RUBY_DEBUG` is set, accessing a class in an invalid object will
cause a breakpoint trap instead of a segfault on some implementations.
2024-03-24 01:40:17 +09:00
Nobuyoshi Nakada
678cb80033
Move -test-/fatal/rb_fatal to -test-/fatal 2024-03-24 01:09:29 +09:00
Nobuyoshi Nakada
43fe89d921 [ruby/win32ole] Refine pathspecs for spec.files
8d443417a9
2024-03-23 13:06:40 +00:00
Nobuyoshi Nakada
14fba5a784 [ruby/win32ole] Exclude unused files from packages
f4aff99dda
2024-03-23 10:34:57 +00:00
Nobuyoshi Nakada
af88ca4c07
Match --with/--without options against gem names
The simple names in `default_exclude_exts` do not match extension
paths under gems.

Extract each gem name from the gemspec file at the top level of each
gem directory.  For example, if `ext` is `syslog-0.1.2/ext/syslog/`,
find out `syslog-0.1.2/syslog.gemspec` and take the base name `syslog`
without the suffix `.gemspec`.
2024-03-22 14:09:12 +09:00
Nobuyoshi Nakada
235aa7ad63
Pass blocks to blocks as block parameters 2024-03-22 14:06:55 +09:00
S-H-GAMELINKS
060a71d4e7 Fix Ripper memory allocation size when enabled Universal Parser
The size of `struct parser_params` is 8 bytes difference in `ripper_s_allocate` and `rb_ruby_parser_allocate` when the universal parser is
enabled.
This causes a situation where `*r->p` is not fully initialized in `ripper_s_allocate` as shown below.

```console
(gdb) p *r->p
$2 = {heap = 0x0, lval = 0x0, yylloc = 0x0, lex = {strterm = 0x0, gets = 0x0, input = 0, string_buffer = {head = 0x0, last = 0x0}, lastlin
e = 0x0,
    nextline = 0x0, pbeg = 0x0, pcur = 0x0, pend = 0x0, ptok = 0x0, gets_ = {ptr = 0, call = 0x0}, state = EXPR_NONE, paren_nest = 0, lpar
_seen = 0,
    debug = 0, has_shebang = 0, token_seen = 0, token_info_enabled = 0, error_p = 0, cr_seen = 0, value = 0, result = 0, parsing_thread = 0, s_value = 0,
    s_lvalue = 0, s_value_stack = 2097}
````

This seems to cause `double free or corruption (!prev)` and SEGV.
So, fixing this by introduce `rb_ripper_parser_params_allocate` and `rb_ruby_parser_config` functions for Ripper, and `struct parser_params` same size is returned.
2024-03-21 18:10:02 +09:00
Benoit Daloze
6ecee4ec31 [ruby/openssl] Revert "Always respect the openssl prefix chosen by truffle/openssl-prefix on TruffleRuby"
* This reverts commit ca738e7e13.
* No longer needed since https://github.com/oracle/truffleruby/issues/3170 was fixed.

1f641a5604
2024-03-20 11:44:13 +00:00
Étienne Barrié
12be40ae6b Implement chilled strings
[Feature #20205]

As a path toward enabling frozen string literals by default in the future,
this commit introduce "chilled strings". From a user perspective chilled
strings pretend to be frozen, but on the first attempt to mutate them,
they lose their frozen status and emit a warning rather than to raise a
`FrozenError`.

Implementation wise, `rb_compile_option_struct.frozen_string_literal` is
no longer a boolean but a tri-state of `enabled/disabled/unset`.

When code is compiled with frozen string literals neither explictly enabled
or disabled, string literals are compiled with a new `putchilledstring`
instruction. This instruction is identical to `putstring` except it marks
the String with the `STR_CHILLED (FL_USER3)` and `FL_FREEZE` flags.

Chilled strings have the `FL_FREEZE` flag as to minimize the need to check
for chilled strings across the codebase, and to improve compatibility with
C extensions.

Notes:
  - `String#freeze`: clears the chilled flag.
  - `String#-@`: acts as if the string was mutable.
  - `String#+@`: acts as if the string was mutable.
  - `String#clone`: copies the chilled flag.

Co-authored-by: Jean Boussier <byroot@ruby-lang.org>
2024-03-19 09:26:49 +01:00
Nobuyoshi Nakada
e670892497
Remove no longer needed matching 2024-03-17 18:47:18 +09:00
Nobuyoshi Nakada
9e470ebdcd
Revert "Remove flip-flop usages from build scripts"
This reverts commit 301fa452f7.
2024-03-17 18:28:28 +09:00
Nobuyoshi Nakada
a1ced60692 [ruby/stringio] NULL StringIO by StringIO.new(nil)
779f71359d
2024-03-15 04:34:14 +00:00
Jean Boussier
09d8c99cdc Ensure test suite is compatible with --frozen-string-literal
As preparation for https://bugs.ruby-lang.org/issues/20205
making sure the test suite is compatible with frozen string
literals is making things easier.
2024-03-14 17:56:15 +01:00
Nobuyoshi Nakada
578f96afb5 [ruby/stringio] [DOC] Package rdoc files
8522c90e4b
2024-03-14 04:30:28 +00:00
Nobuyoshi Nakada
c913f3347c [ruby/stringio] [DOC] Add missing documents
9cc1dfa19c
2024-03-14 04:30:28 +00:00
Nobuyoshi Nakada
35706c608c [ruby/stringio] [DOC] Add rdoc task
5dd52d4aec
2024-03-14 04:30:27 +00:00
Nobuyoshi Nakada
b01d319ec8 [ruby/fcntl] [DOC] Package files for RDoc
b946e505f1
2024-03-14 04:19:46 +00:00
Nobuyoshi Nakada
e394f5539e [ruby/fcntl] [DOC] Package document files
ed2d725505
2024-03-14 04:01:24 +00:00
Nobuyoshi Nakada
4ae67b1ab5 [ruby/fcntl] [DOC] Add missing documents
a201ed6682
2024-03-14 03:49:40 +00:00
Nobuyoshi Nakada
085daf4840 [ruby/fcntl] [DOC] Add task and files for RDoc
1c7c70fa5d
2024-03-14 03:49:40 +00:00
Nobuyoshi Nakada
5fe1853e9b [ruby/fcntl] Reduce duplicate O_ACCMODE definitions
6a6442a7f8
2024-03-14 03:49:38 +00:00
Nobuyoshi Nakada
d49b41566b [ruby/fcntl] [DOC] Remove redundant directives
a99909a90f
2024-03-14 03:49:37 +00:00
Nobuyoshi Nakada
3f8ef7ff7c [ruby/stringio] Define StringIO::MAX_LENGTH
0205bd1c86
2024-03-13 13:20:23 +00:00
Nobuyoshi Nakada
78725f14b2
RMDIRS includes -p option [ci skip] 2024-03-07 17:13:43 +09:00
Jean Boussier
b4a69351ec Move FL_SINGLETON to FL_USER1
This frees FL_USER0 on both T_MODULE and T_CLASS.

Note: prior to this, FL_SINGLETON was never set on T_MODULE,
so checking for `FL_SINGLETON` without first checking that
`FL_TYPE` was `T_CLASS` was valid. That's no longer the case.
2024-03-06 13:11:41 -05:00
Lazarus Lazaridis
61ea202f8b
[DOC] Fix invalid documentation for reachable_objects_from (#10172)
Previous documentation is stating the opposite (that the method won't
work for CRuby).
2024-03-05 01:35:51 +09:00
Thomas Marshall
7e4b1f8e19
[Bug #20322] Fix rb_enc_interned_str_cstr null encoding
The documentation for `rb_enc_interned_str_cstr` notes that `enc` can be
a null pointer, but this currently causes a segmentation fault when
trying to autoload the encoding. This commit fixes the issue by checking
for NULL before calling `rb_enc_autoload`.
2024-03-03 10:43:35 +00:00
Nobuyoshi Nakada
93556d4620 [ruby/etc] Drop support for old ERB
11677318ac
2024-03-02 16:40:16 +00:00
Nobuyoshi Nakada
e9a7801a93
Drop support for old ERB 2024-03-03 00:55:45 +09:00
KJ Tsanaktsidis
fe0b704df5 Skip assert_no_memory_leak when ASAN is enabled
ASAN greatly increases the memory footprint of Ruby, so these static
thresholds are not appropriate. There's no real need to run these tests
under ASAN.

[Bug #20274]
2024-02-28 14:41:03 +11:00
Pierrick Bouvier
1ca3482e0a Fix compilation for platforms without pthread
Found when compiling ruby for windows-arm64 using msys2

Missing return type for function Init_lock_native_thread
lock_native_thread.c:45:1: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
   45 | Init_lock_native_thread(void)
      | ^
      | int
2024-02-26 20:45:48 +09:00
Aaron Patterson
164e464b04 [ruby/strscan] Add a method for peeking and reading bytes as
integers
(https://github.com/ruby/strscan/pull/89)

This commit adds `scan_byte` and `peek_byte`. `scan_byte` will scan the
current byte, return it as an integer, and advance the cursor.
`peek_byte` will return the current byte as an integer without advancing
the cursor.

Currently `StringScanner#get_byte` returns a string, but I want to get
the current byte without allocating a string. I think this will help
with writing high performance lexers.

---------

873aba2e5d

Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2024-02-26 15:54:54 +09:00