diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp index 12c011030af20165d0b59a2c591e1ce0249c2531..b5900fc78133fd204cf71223cf3ff27dda3e3767 100644 --- a/src/sip/sipvoiplink.cpp +++ b/src/sip/sipvoiplink.cpp @@ -1215,7 +1215,13 @@ resolver_callback(pj_status_t status, void *token, const struct pjsip_server_add void SIPVoIPLink::resolveSrvName(const std::string &name, pjsip_transport_type_e type, SrvResolveCallback cb) { - if (name.length() >= PJ_MAX_HOSTNAME) { + // PJSIP limits hostname to be longer than PJ_MAX_HOSTNAME. + // But, resolver prefix the given name by a string like "_sip._udp." + // causing a check against PJ_MAX_HOSTNAME to be useless. + // It's not easy to pre-determinate as it's implementation dependent. + // So we just choose a security marge enough for most cases, preventing a crash later + // in the call of pjsip_endpt_resolve(). + if (name.length() > (PJ_MAX_HOSTNAME - 12)) { RING_ERR("Hostname is too long"); cb({}); return;