[lvgl] Fix dangling pointer issue with qrcode (#9190)

This commit is contained in:
Clyde Stubbs 2025-06-24 09:43:40 +10:00 committed by GitHub
parent a35e476be5
commit 612c8d5841
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 7 deletions

View File

@ -3,7 +3,7 @@ import esphome.config_validation as cv
from esphome.const import CONF_SIZE, CONF_TEXT from esphome.const import CONF_SIZE, CONF_TEXT
from esphome.cpp_generator import MockObjClass from esphome.cpp_generator import MockObjClass
from ..defines import CONF_MAIN, literal from ..defines import CONF_MAIN
from ..lv_validation import color, color_retmapper, lv_text from ..lv_validation import color, color_retmapper, lv_text
from ..lvcode import LocalVariable, lv, lv_expr from ..lvcode import LocalVariable, lv, lv_expr
from ..schemas import TEXT_SCHEMA from ..schemas import TEXT_SCHEMA
@ -34,7 +34,7 @@ class QrCodeType(WidgetType):
) )
def get_uses(self): def get_uses(self):
return ("canvas", "img") return ("canvas", "img", "label")
def obj_creator(self, parent: MockObjClass, config: dict): def obj_creator(self, parent: MockObjClass, config: dict):
dark_color = color_retmapper(config[CONF_DARK_COLOR]) dark_color = color_retmapper(config[CONF_DARK_COLOR])
@ -45,10 +45,8 @@ class QrCodeType(WidgetType):
async def to_code(self, w: Widget, config): async def to_code(self, w: Widget, config):
if (value := config.get(CONF_TEXT)) is not None: if (value := config.get(CONF_TEXT)) is not None:
value = await lv_text.process(value) value = await lv_text.process(value)
with LocalVariable( with LocalVariable("qr_text", cg.std_string, value, modifier="") as str_obj:
"qr_text", cg.const_char_ptr, value, modifier="" lv.qrcode_update(w.obj, str_obj.c_str(), str_obj.size())
) as str_obj:
lv.qrcode_update(w.obj, str_obj, literal(f"strlen({str_obj})"))
qr_code_spec = QrCodeType() qr_code_spec = QrCodeType()

View File

@ -646,7 +646,9 @@ lvgl:
on_click: on_click:
lvgl.qrcode.update: lvgl.qrcode.update:
id: lv_qr id: lv_qr
text: homeassistant.io text:
format: "A string with a number %d"
args: ['(int)(random_uint32() % 1000)']
- slider: - slider:
min_value: 0 min_value: 0