1. PHP / Говнокод #23425

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    <?php
    class Foo implements JsonSerializable {
      public function jsonSerialize() {
        return new self;
      }
    }
    
    # Segfault!
    var_dump(json_encode(new Foo));

    https://habrahabr.ru/company/mailru/blog/340242/
    😆

    Запостил: inho, 17 Октября 2017

    Комментарии (3) RSS

    • В языках где нет цветовой диф выбора между стеком и кучей слово "new" лишено смысла

      Почему-то питон и котлин это понимают
      Ответить
      • Аналогичный код на Perl тоже сегфолтится (правда только при использовании JSON::XS на локалхосте): https://ideone.com/xBSfTz

        #!/usr/bin/perl
        
        use strict;
        use warnings;
        
        use JSON qw();
        
        package Foo;
        
        sub new {
            return bless {} => shift;
        }
        
        sub TO_JSON {
            return new Foo;
        }
        
        package main;
        
        my $json = JSON->new()->convert_blessed(1)->pretty(1);
        print $json->encode(new Foo);
        Ответить
        • >> return bless {} => shift;
          Более всего я ценю перл за простоту и лакончиность
          Ответить

    Добавить комментарий