Em 3,6% dos repositórios Python testados foram encontrados erros relacionados a vírgulas ausentes.

Foram publicadas os resultados de um estudo sobre a vulnerabilidade do código em Python a erros relacionados ao uso incorreto de vírgulas. Os problemas surgem porque, em listas, o Python automaticamente combina strings que não são separadas por vírgulas e, além disso, considera um valor como uma tupla se uma vírgula seguir o valor. Após uma análise automatizada de 666 repositórios do GitHub com código em Python, os pesquisadores identificaram possíveis problemas com vírgulas em 5% dos projetos analisados.

Uma verificação manual adicional revelou que erros reais estavam presentes apenas em 24 repositórios (3,6%), enquanto os outros 1,4% eram falsos positivos (por exemplo, uma vírgula poderia ter sido intencionalmente omitida entre strings para combinar caminhos de arquivos quebrados em várias linhas, hashes longos, blocos HTML ou expressões SQL). Notavelmente, entre os 24 repositórios com erros reais estavam grandes projetos como Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield e django-helpdesk. Além disso, os problemas com vírgulas não são específicos do Python e frequentemente surgem em projetos em C/C++ (exemplos recentes de correções incluem LLVM, Mono, Tensorflow).

Principais tipos de erros estudados:

  • Vírgula acidentalmente omitida em listas, tuplas e conjuntos, resultando na combinação de strings em vez de sua interpretação como valores separados. Por exemplo, no Sentry, em um dos testes, uma vírgula foi omitida entre as strings "releases" e "discover" em uma lista, o que levou à verificação de um manipulador inexistente "/releasesdiscover" em vez da verificação separada de "/releases" e "/discover".
    Em 3,6% dos repositórios Python testados foram encontrados erros relacionados a vírgulas ausentes.

    Outro exemplo é a vírgula omitida no rapidpro, que levou à combinação de duas regras diferentes na linha 572:

    Em 3,6% dos repositórios Python testados foram encontrados erros relacionados a vírgulas ausentes.
  • Vírgula omitida no final da definição de uma tupla de um elemento, resultando em uma atribuição que irá atribuir não uma tupla, mas um tipo comum. Por exemplo, a expressão "values = (1,)" resultará na atribuição de uma tupla com um elemento à variável, mas "values = (1)" resultará em uma atribuição do tipo inteiro. Os parênteses nas atribuições mencionadas não afetam a definição do tipo e são opcionais, enquanto a existência de uma tupla é definida pelo parser apenas com base na presença de vírgulas. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # em vez de uma tupla, uma string será atribuída. ) }
  • A situação inversa — vírgulas adicionais durante a atribuição. Se uma vírgula for acidentalmente deixada no final da atribuição, um tupla será atribuída como valor em vez do tipo comum (por exemplo, se em vez de "value = 1" for indicado "value = 1,").

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster