Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Acquiring a blob lease without a duration causes later requests to return 500

Abierto
#2,855 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@hippi345 ya está trabajando en esto.

Desde el 17/10/2026.

  • #2864 de @hippi345 — abierto

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
65/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
azure, python, typescript
Área
backend

Línea de trabajo

Start by running the Python reproduction script from the issue against a local Azurite Blob endpoint, then watch the server log. Search the TypeScript source for the LeaseExpiredState constructor and for where the x-ms-lease-duration value is read during lease acquire. Done when a lease acquire without a duration returns 400 MissingRequiredHeader and the later blob GET and container listing both return normal responses.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Lease acquire accepts a missing x-ms-lease-duration, then the blob and its container listing return 500.

On a local Azurite Blob endpoint at 127.0.0.1:10000 with its default development account, run this Python 3 script (standard library only):

import http.client, uuid

# SAS derived from Azurite's public default development key, not a cloud credential.
sas = "sv=2023-11-03&ss=b&srt=sco&sp=rwdl&se=2099-01-01&sig=gF53rwiyjUw0Grh2NB8D%2Bw%2FK1kP1kspe6Cj3FCMjg%2F0%3D"
container = "repro" + uuid.uuid4().hex

def request(method, path, headers=None, body=b""):
    headers = {"x-ms-version": "2023-11-03", **(headers or {})}
    suffix = "&" if "?" in path else "?"
    conn = http.client.HTTPConnection("127.0.0.1", 10000, timeout=3)
    conn.request(method, "/devstoreaccount1/" + path + suffix + sas, body, headers)
    response = conn.getresponse()
    status, data, response_headers = response.status, response.read(), {name.lower(): value for name, value in response.getheaders()}
    conn.close()
    print(method, path, status, data if method == "GET" and "comp=list" not in path else b"")
    return status, data, response_headers

request("PUT", container + "?restype=container")
request("PUT", container + "/b", {"x-ms-blob-type": "BlockBlob"})
request("PUT", container + "/b?comp=lease", {"x-ms-lease-action": "acquire"})
request("GET", container + "/b")
request("GET", container + "?restype=container&comp=list")

Actual: acquire returns 201; both GETs return 500. Expected: acquire returns 400 MissingRequiredHeader, without corrupting later requests. Acquiring with duration 15 works. The error log says LeaseExpiredState:constructor() error, incoming leaseDurationSeconds undefined.

Tested on a local Azurite main build dated 2026-10-14, package 3.37.0, image ID 36a731a849ee706bae6cd312c2547509ad584a1e9bddc7c924374d1ae084da88. Every request explicitly uses API version 2023-11-03. The source commit of that local build was not recorded.

Lenguaje dominante
TypeScript
Estrellas
2.3k
Forks
398
Merge medio
1 d 2 h
PR fusionados (30 d)
49

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Azure/Azurite

Todos los issues de Azure/Azurite

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.