Árvore de páginas

Correção – Erro stack depth overflow no Application Server

Esta correção impede um erro fatal stack depth overflow causado pela chamada de um método de uma classe que herda LongNameClass indiretamente.

Abrangência ERP 10 e 11
Situação Utilização de programas AdvPL, quando há herança indireta da classe “LongNameClass”.
Ocorrência Quando uma classe herda indiretamente LongNameClass (por exemplo, a classe B herda uma classe A que por sua vez herda LongNameClass) não é possível definir nomes de método e/ou nomes de propriedades com mais de 10 caracteres.  Neste cenário, uma herança indireta em que um método da classe B chama outro método da classe A, onde os 10 primeiros caracteres dos nomes desses dois métodos são iguais, uma chamada recursiva ao método da classe B pode acontecer, abortando a execução da aplicação com uma ocorrência de erro fatal “stack depth overflow”.
Correção Em tempo de execução, é checado recursivamente se alguma classe herda LongNameClass, desta forma a chamada do método exemplificada na ocorrência é feita de forma correta, não causando a recursão.
Informações adicionais Uma herança indireta da classe LongNameClass não permite a declaração na mesma classe de dois métodos ou propriedades onde os 10 primeiros caracteres coincidam. Somente é possível esta implementação quando herdamos diretamente da classe LongNameClass. Este  comportamento já existia antes desta correção, e foi mantido sem alterações. 
É importante ressaltar que, caso tenha escrito um programa AdvPL onde uma classe tenha herança indireta de LongNameClass e tenha definido um método com nome maior do que 10 caracteres, e realizado a chamada a estes método utilizando apenas os 10 primeiros caracteres do nome do método,  a chamada era realizada com sucesso.  A partir da build atual, nesta condição de herança, caso os métodos com nome longo não forem chamados com o nome completo,  a aplicação AdvPl será finalizada com a ocorrência de erro “invalid method” .

  • Sem rótulos